в любом случае, если объект не реализован в идиоме Handle-Worker.
У меня сложный класс со многими переменными. У меня есть надежный и проверенный экземпляр конструктора:Некоторые из конструкторов копирования переменных-членов, вызываемых в списке инициализаторов, выполняют распределение.
Applepie::Applepie( const Applepie ©) :
m_crust(copy.m_crust),
m_filling(copy.m_filling)
{
}
Вопрос:
Мне нужно создать, Вместо того, чтобы дублировать существующий конструктор с присваиванием вместо списка инициализации и освободить заменяемую память, и т. Д. И т. Д., Я могу просто сделать следующее:operator=
Другими словами, уничтожить ли себя с последующим размещением нового конструктора копирования семантически идентично operator =?
Applepie& Applepie::operator=( const Applepie ©)
{
if( this != ©)
{
this->~Applepie(); // release own object
new(this) Applepie(copy); // placement new copy constructor
}
return *this;
}
Похоже, что это может значительно сократить количество повторяющихся кодов и подтвердить, что каждая переменная инициализирована должным образом, за счет возможной небольшой потери эффективности во время присваивания. Я что-то упускаю из виду?
Обоснование:
Мой настоящий класс имеет около 30 переменных. Я обеспокоен тем фактом, что и мой конструктор копирования, и мой оператор присваивания должны копировать все тридцать и что код может расходиться, в результате чего две операции будут действовать по-разному.Если копирует ctor, вы разбили объект, поэтому вы не даете никаких гарантий безопасности.