使用するヘッダーを含むサードパーティのライブラリが提供されます。現在、このライブラリにはクラス「Base」があります。このクラスの問題は、仮想デストラクタがないことです。サードパーティのコードを持っていないので、そこで変更を行うことはできません。
これを使用していくつかの派生クラスを作成し、オブジェクトが削除されたときにオブジェクトが適切にクリーンアップされるようにするように言われました。どうすればこれを達成できますか?
返信ありがとうございます。選択肢が 2 つしかないようです。
1) 派生クラスに仮想デストラクタを配置する 2) コンポジションを使用する。
私はアプローチ番号1を取ることを計画しています。仮想デストラクタを持つラッパー派生クラスを持つことを計画しています。そして、このラッパー派生クラスを使用して、さらに派生させます。以下はコードです。
//++ THIRD PARTY HEADER
class base
{
public:
~base(){ }
};
//-- THIRD PARTY HEADER
//++ MY CODE
// wrapper polymorphic base.
class polymorphic_base
{
public:
virtual ~polymorphic_base() { }
};
class derived1 : polymorphic_base
{
/// derived 1
};
class derived2 : polymorphic_base
{
/// derived 2
}
void foo(polymorphic_base *pb)
{
// use pb
// use pb
delete pb;
}
//-- MY CODE
このアプローチで問題ないかどうか教えてください。