Подтвердить что ты не робот

Что нового (это) означает?

Я нашел этот образец кода для изучения:

T & T::operator=(T const & x)
{
  if (this != &x)
  {
    this->~T(); // destroy in place
    new (this) T(x); // construct in place
  }
  return *this;
}

Когда я смотрю документацию для new, нет версии, которая принимает указатель. Таким образом:

  • Что означает новый (это)?
  • Для чего он используется?
  • Как это можно назвать так, если оно не указано в документации?
4b9b3361

Ответ 1

Он называется "размещение нового", а комментарии в фрагменте кода в значительной степени объясняют это:

Он создает объект типа T без выделения для него памяти, по адресу, указанному в круглых скобках.

Итак, вы смотрите на оператор присваивания копий, который сначала уничтожает объект, который копируется (без освобождения памяти), а затем создает новый в том же адресе памяти. (Это также довольно плохая идея для реализации оператора таким образом, как указано в комментариях)