ヒープ上で実行されるオブジェクトが、処理が完了したときに常に割り当て解除されるようにする方法を探しています。
スタックに割り当てられている場合、RAIIを使用して確実に処理できることを知っています-残念ながら、問題のオブジェクトはAPI関数を呼び出すことによって実際に作成されるため、これは(少なくとも直接的には)機能しません、ヒープ上に作成するオブジェクトへのポインターを返します。
したがって、概念的には、私がやりたいことは次のようなものです。
TheApi::ApiObject* p_myObj = TheApi::createAnApiObj();
try
{
doStuffWithMyObjThatMayError(p_myObj);
}
finally
{
delete p_myObj;
}
私が考えることができる唯一のことは、ある種のダミーのクリーンアップ クラスを作成し、スタック上にそのインスタンスを作成することです。
class MegaMaid
{
private:
TheApi::ApiObject* toFree;
public:
MegaMaid(TheApi::ApiObject* toFree)
{
this->toFree = toFree;
}
~MegaMaid()
{
delete toFree;
}
};
void doStuff()
{
TheApi::ApiObject* p_myObj = TheApi::createAnApiObj();
TheApi::ApiObject* p_myObj;
MegaMaid cleaner(p_myObj);
doStuffWithMyObjThatMayError(p_myObj);
}
これを達成するためのより良い方法はありますか?それとも、これは受け入れられた解決策ですか?