最近のインタビューで、このコードが安全かどうか、また安全である場合、次のようなものをいつ使用するかを尋ねられました。
template<class T> T *CTricky<T>::Safe_Or_Not (T *object)
{
object->T::~T ();
::new (object) T;
return object;
}
私の答えは次のとおりです。このコードは安全であり、デストラクタを呼び出して「オブジェクト」で使用されているリソースを解放する必要がある場合は、この手法を使用しますが、同時に「オブジェクト」の割り当てを解除したくありませんでした。メモリ内の場所を保持します(ここで新しい配置によって達成されます)。
正直なところ、面接でこの質問に正しく答える助けを求めているわけではありません。新規および明示的なデストラクタ呼び出しの配置に関する私の理解が正しいかどうかを知りたいだけです。