フィールドの1つとしてクラスBへのポインターを持つクラスAがあります。
class A {
private:
B *ptr;
public:
A(B*);
A();
~A();
}
A::A(B *ptr)
{
this->ptr = ptr;
}
A::A()
{
this->ptr = new B();
}
A::~A()
{
delete this->ptr;
}
new によって割り当てられた場合にのみ、デストラクタに B を削除させたいのですが、ポインタの起点を格納するフラグを設定することによってのみこれを行うことができます (そのため、A の構築中に ptr が割り当てられた場合にのみ delete が呼び出されます)。または、より洗練された解決策がありますか。つまり、任意のポインターで delete を呼び出すことができます (渡されたポインターが new を使用して割り当てられた場合、それも削除されることはわかっていますが、ポインターがスコープから渡された場合A のコンストラクターが呼び出され、明らかにこれを削除することは未定義です)?