1

したがって、抽象仮想クラスの削除をオーバーロードしたいと思います。これにより、別のライブラリにある派生クラスで deleteMe() が呼び出されます。これはエラー/クラッシュを防ぐためです。C++ mix new/delete between libs?

基本クラスで delete から delete me を呼び出すと、「pure virtual func call」というエラーが表示されます。次に、それがすでに私の dtor を呼び出していることがわかりました。delete obj; を記述できるように、dtor を呼び出さないようにこのコードをオーバーロードするか、このコードを記述するにはどうすればよいですか。obj->deleteMe() を呼び出してから、独自の削除関数と dtor を呼び出しますか?

4

1 に答える 1

6

任意のことを行うはずの通常の関数のように、演算子deleteを使用しているようです。ただし、演​​算子deleteは、最初の引数として指定されたメモリを解放することのみを想定しています。これは、そのメモリ領域へのポインタです。

そのポインタは、オブジェクトがあった場所のメモリ位置を指します。ただし、この時点では、オブジェクトのデストラクタはすでに実行されており、オブジェクトはもう存在しません。その上でメンバー関数を呼び出すことはできません-仮想関数はさらに少なくなります!

演算子削除の目的が間違っているような気がします。を呼び出すdelete pointerと、コンパイラはオブジェクトのデストラクタを呼び出してから、割り当て解除関数を呼び出して、割り当てられたメモリを解放します。これは、と呼ばれoperator deleteます。

さて、前に示したソリューションを使用してみませんboost::shared_ptrか?

于 2009-01-14T15:39:20.830 に答える