Так что я собирался через кусок текста в C++ и наткнулся на следующий фрагмент кода:Выполнение задания на классы
class example
{
int dataMember;
public:
example& assign(const example& source)
{
if(this!=&source)
{
this->~example();
new (this) example(source);
}
}
};
Хорошо, так что я пытаюсь расшифровать то, что делает эта функция правопреемником. Что я еще не понял:
Функция принимает постоянную ссылку экземпляра класса и возвращает ссылку на класс.
Внутри блока
if
, во-первых, деструктор вызывается для текущего экземпляра (насколько я знаю, текущий объект уничтожается и память освобождается).
Теперь главный вопрос:
new (this) example(source)
Эта линия беспокоит меня. Что здесь происходит? Если меня попросят угадать, я бы сказал, что создается новый объект и назначается как текущий объект, так как я могу сделать вывод из ключевого слова this
.
Может ли это прояснить это? Как здесь обстоят дела?
Этот метод безопасен? (Если распределение происходит динамически, программисту необходимо будет освободить его в будущем вручную)
Спасибо.
это называется [размещение нового] (http://stackoverflow.com/questions/222557/what-uses-are-there-for-placement-new) – bolov
@bolov, удивительное, это точно, что я искал. Теперь я буду искать в Интернете и узнать больше об этом. –
Это ужасный код. – milleniumbug