私のアプリケーションでは、次のような派生クラスから動的に割り当てられたオブジェクトで満たされた配列を作成して返しています。
void someGetter(std:vector<DerivedClass> & returnV)
{
BaseClass* base = object->clone(); // "object" is a "unique_ptr<BaseClass>"
DerivedClass* derived = dynamic_cast<DerivedClass*> (base);
if (derived != nullptr)
{
returnV.push_back(*derived);
}
else
{
delete base;
}
}
派生は削除されないため、これは明らかにメモリ リークを引き起こします (ここでは valgrinds が役立ちます)。
次のように割り当てられたメモリを解放しようとしました:
delete &returnV[0];
コンパイル エラーや警告は発生せず、コードは正常に動作します。しかし、valgrind はそのコード行でいくつかの追加エラー (無効な読み取り、無効な解放) を報告し、リークはまだ残っています。
このように返されたメモリを解放する方法はありますか? または、オブジェクトの代わりに unique_ptr を返す必要がありますか?