古いコードを少し C から C++ に移植しています。古いコードはオブジェクトのようなセマンティクスを使用し、ある時点でオブジェクトの破棄と現在使用されていないメモリの解放を分離し、その間に次のようなことが起こります。
Object_Destructor(Object *me) { free(me->member1), free(me->member2) }
ObjectManager_FreeObject(ObjectManager *me, Object *obj) { free(obj) }
上記の機能は、標準デストラクタ ( ~Object
) とそれに続く への呼び出しを使用して、C++ で可能delete obj
ですか? それとも、私が恐れているように、それを行うとデストラクタが 2 回呼び出されるのでしょうか?
特定のケースでは、operator delete
ofObject
もオーバーライドされます。私が他の場所で読んだ定義(「演算子deleteが使用され、オブジェクトにデストラクタがある場合、デストラクタは常に呼び出されます)は、オーバーライドされた演算子の場合に正しいですか?