В недавнем интервью меня попросили ответить, безопасен ли этот код и когда я буду использовать что-то вроде этого:
template<class T> T *CTricky<T>::Safe_Or_Not (T *object)
{
object->T::~T ();
::new (object) T;
return object;
}
Мой ответ был: этот код безопасен, и я бы использовал эту технику, если бы мне нужно было освободить ресурсы, используемые моим «объектом», вызвав его деструктор, но в то же время я не хотел освобождать свой «объект» и хотел он удерживает свое место в памяти (достигается размещением здесь new).
Честно говоря, я не ищу помощи, чтобы правильно ответить на этот вопрос на собеседовании. Мне только любопытно узнать, правильно ли я понимаю размещение новых и явных вызовов деструктора.