在最近的一次采访中,我被要求回答这段代码是否安全,以及我何时会使用这样的代码:
template<class T> T *CTricky<T>::Safe_Or_Not (T *object)
{
object->T::~T ();
::new (object) T;
return object;
}
我的回答是:这段代码是安全的,如果我需要通过调用它的析构函数来释放我的“对象”使用的资源,我会使用这种技术,但同时我不想释放我的“对象”并且想要它在内存中保存它的位置(通过在这里放置 new 来实现)。
老实说,我并不是在寻求帮助来在面试中正确回答这个问题。我只是好奇我对放置 new 和显式析构函数调用的理解是否正确。