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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
LosAngeles
Заблокирован
#1

copy constructor operator= - C++

03.08.2011, 15:54. Просмотров 1809. Ответов 26

сижу я значит почитываю черновик будущего стандарта и вижу
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).
то есть юзать можно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
03.08.2011, 17:58     copy constructor operator=
  #21

Не по теме:

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 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
Эксперт С++
1017 / 796 / 48
Регистрация: 30.04.2011
Сообщений: 1,617
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=
Еще ссылки по теме:

C++ Copy constructor
Реализация operator + через operator += C++
Default copy constructor C++
C++ Initializer_list constructor
Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 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=
Ответ Создать тему
Опции темы

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