в любом случае, если объект не реализован в идиоме Handle-Worker.

 У меня сложный класс со многими переменными. У меня есть надежный и проверенный экземпляр конструктора:Некоторые из конструкторов копирования переменных-членов, вызываемых в списке инициализаторов, выполняют распределение.

Applepie::Applepie( const Applepie &copy) :
m_crust(copy.m_crust),
m_filling(copy.m_filling)
{
}

Вопрос:

 Мне нужно создать, Вместо того, чтобы дублировать существующий конструктор с присваиванием вместо списка инициализации и освободить заменяемую память, и т. Д. И т. Д., Я могу просто сделать следующее:operator=Другими словами, уничтожить ли себя с последующим размещением нового конструктора копирования семантически идентично operator =?

Applepie& Applepie::operator=( const Applepie &copy)
{
    if( this != &copy)
    {
       this->~Applepie(); // release own object
       new(this) Applepie(copy); // placement new copy constructor
    }
    return *this;
}

Похоже, что это может значительно сократить количество повторяющихся кодов и подтвердить, что каждая переменная инициализирована должным образом, за счет возможной небольшой потери эффективности во время присваивания. Я что-то упускаю из виду?

Обоснование:

 Мой настоящий класс имеет около 30 переменных. Я обеспокоен тем фактом, что и мой конструктор копирования, и мой оператор присваивания должны копировать все тридцать и что код может расходиться, в результате чего две операции будут действовать по-разному.Если копирует ctor, вы разбили объект, поэтому вы не даете никаких гарантий безопасности.

Ответы на вопрос(1)

Ваш ответ на вопрос