![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
DEADHUNT |
![]()
Сообщение
#51
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
Синтаксис я тоже не понял ![]() = delete/default применяется только к специальным членам класса(конструктор, конструктор копирования, ...), delete обозначает то что компилятор не должен генерировать default версию этого специального члена класса, а при попытке вызова выдавать ошибку компиляции(это равносильно объявиления данного члена закрытым и не реализовывать). default показывает компилятору что он должен создать default версию данного члена, например:
иначе бы компилятор не стал создавать конструктор по умолчанию. |
|
|
Алексей1153 |
![]()
Сообщение
#52
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
понятно
то есть мне нужно добавить
Сообщение отредактировал Алексей1153 - 13.8.2010, 20:29 |
|
|
DEADHUNT |
![]()
Сообщение
#53
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
то есть мне нужно добавить это же разрушающее копирование получается(если ещё посмотреть код operator=), т.е. что-то типа std::auto_ptr, а их нельзя в контейнерах использовать, надо что-то типа shared_ptr делать, то есть хранить количество ссылок на указатель, ... Сообщение отредактировал DEADHUNT - 13.8.2010, 20:44 |
|
|
Алексей1153 |
![]()
Сообщение
#54
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
DEADHUNT, так так, тут вот поподробнее. Почему разрушающее? Я копирую указатель в новую оболочку, а сам "указуемый" объект жив.
Это вот в операторе = у меня заменяемый объект отправляется в кучу, а принимаемый его заменяет Почему нельзя в контейнере использовать, ведь контейнер ничего неиспортит, вызывая конструкторы и операторы Я главную цель всей этой эпопеи не сказал (думал, и так понятно) - безопасное использование resize() контейнера + автоудаление "указуемых" объектов в кучу Сообщение отредактировал Алексей1153 - 13.8.2010, 20:47 |
|
|
DEADHUNT |
![]()
Сообщение
#55
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
получается так:
и ещё непонятно зачем operator= принимает константную ссылку, а внутре изменяет содержимое константного объекта, лучше было бы в параметре использовать не константную ссылку. Сообщение отредактировал DEADHUNT - 13.8.2010, 20:52 |
|
|
Алексей1153 |
![]()
Сообщение
#56
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Я не собирался отдельно объявлять переменные класса s_VectorPtr<T> , всем этим заведует сам вектор (структура s_VectorPtr, кстати, в проекте, откуда выдрано, описана как приватная внутри класса с вектором)
Теперь я понимаю твоё возмущение, а также , почему у меня всё работает, хотя, по стандарту, не должно ![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 9:20 |