5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【標準C++】C++相談室 part39【STL含む】

725 :デフォルトの名無しさん:05/02/24 20:59:43
継承とdelete周りの質問です。
クラスAとそれを継承したBがあるのですが、Bは頻繁に生成・削除されるため、
operator newとoperator deleteを書き換えようと思いました。
他にも頻繁に生成・削除されるクラスがあるために共通化したMemoryPoolクラスを
作成し、それを継承したクラスはこのメモリプールを用いてメモリを確保するようにしています。

大体下のような感じです。
template<typename T> class MemoryPool{
 void* operator new(size_t){〜〜};
 void operator delete(void*){〜〜};
};

class A{〜〜};
class B : public A , public MemoryPool<B>{〜〜};

ここで、Bのインスタンスを生成するときにはnew BとするのでMemoryPool::operator newが
呼ばれるのですが、その後ポインタをA*に代入してdeleteするとAのoperator delete(当然
何も作成してないのでデフォルトのoperator delete)が呼ばれてしまいます。

ここでMemoryPool::operator deleteによってメモリを解放させたいのですが、
何かいい方法はあるのでしょうか?


operator deleteが仮想関数として定義できないのが原因なら、
virtual void A::Delete(){ delete this;}
void B::Delete(){ ~B(); operator delete(this);}
みたいに仮想関数内でdeleteしてしまおうかと考えているのですが、delete thisが不安です。

よろしくお願いします。

240 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)