Форум программистов, компьютерный форум CyberForum.ru

copy constructor operator= - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
LosAngeles
Заблокирован
03.08.2011, 15:54     copy constructor operator= #1
сижу я значит почитываю черновик будущего стандарта и вижу
C++
1
2
3
4
5
6
7
const C& C::operator=( const C& other) {
      if ( this != &other ) {
           this->~C();
           new (this) C(other);
      }
return *this;
}
оператор=, реализованный через конструктор копирования и написанный в две строчки. Я обычно сначала зачищал старое и присваивал новое ну как сказать почленно и не я один, а тут такая гениальная вроде конструкция. Поэтому я подумал, что тут наверняка есть подводный камень, но пока не могу сообразить какой именно? Там правда несколько ограничений из которых существенно наверно только это
the original object was a most derived object (1.8) of type T and the new object is a most derived
object of type T (that is, they are not base class subobjects).
то есть юзать можно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2011, 15:54     copy constructor operator=
Посмотрите здесь:

this и Copy-Constructor C++
Copy-Constructor В Шаблонном Связном списке C++
C++ Deep copy and Shadow copy
C++ Copy Constructor Question .Generic inheritance. Templates
operator char() или operator int() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
03.08.2011, 17:58     copy constructor operator=
  #21

Не по теме:

я проверил, вроде для placement new неважно объект был порождён другой формой new или создан в стеке
LosAngeles, я поправился в 13-ом посте.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.08.2011, 17:58     copy constructor operator= #22
Да все нормально, выделенная память освобождается (посредством явного вызова деструктора), а с помощью placement new и copy-конструктора выделяем ее на тоже самое место.
LosAngeles
Заблокирован
03.08.2011, 18:04  [ТС]     copy constructor operator= #23
ValeryLaptev, прям целая лекция
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.08.2011, 18:04     copy constructor operator= #24
Цитата Сообщение от LosAngeles Посмотреть сообщение
ValeryLaptev, прям целая лекция
А то! Для студентов книжку писал - разобрался...
Сыроежка
Заблокирован
03.08.2011, 19:37     copy constructor operator= #25
Цитата Сообщение от Kastaneda Посмотреть сообщение
Да, пардон, имелось ввиду - что явный вызов деструктора оправдан, только если ...(далее по тексту)
В общем не подумав написал) В данном коде явный вызов тоже оправдан, если считать разумным вызов деструктора в операторе =
Деструктор можно вызывать даже для встроенных типов. Например,

C++
1
2
3
4
5
int *p = new int( 10 );
 
p->~int();
 
delete p;
LosAngeles
Заблокирован
03.08.2011, 19:55  [ТС]     copy constructor operator= #26
не в gcc 4.4.3
только если обернуть в шаблон или typedef. В случае T = встроенный тип, компилятор просто игнорирует такую инструкцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2011, 12:35     copy constructor operator=
Еще ссылки по теме:

что делает copy constructor? C++
C++ Copy constructor
Реализация operator + через operator += C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.09.2011, 12:35     copy constructor operator= #27
Цитата Сообщение от LosAngeles Посмотреть сообщение
то есть юзать можно?
Тот же Саттер не рекомендует использовать подобные хаки. Подобный подход делает код слабоустойчивым к ошибкам.
Yandex
Объявления
03.09.2011, 12:35     copy constructor operator=
Ответ Создать тему

Метки
copy operator=
Опции темы

Текущее время: 19:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru