【发布时间】:2014-03-10 07:01:33
【问题描述】:
在最近的一次采访中,我被要求回答这段代码是否安全以及我何时会使用这样的代码:
template<class T> T *CTricky<T>::Safe_Or_Not (T *object)
{
object->T::~T ();
::new (object) T;
return object;
}
我的回答是:这段代码是安全的,如果我需要通过调用它的析构函数来释放我的“对象”使用的资源,我会使用这种技术,但同时我不想释放我的“对象” " 并希望它保留在内存中的位置(通过在此处放置 new 来实现)。
老实说,我并不是在寻求帮助来在面试中正确回答这个问题。我只是好奇我对放置 new 和显式析构函数调用的理解是否正确。
【问题讨论】:
-
这就是为什么要为对象回收空间(以及其他一切!),移动语义非常棒。
标签: c++ placement-new explicit-destructor-call