1

オブジェクトへのポインタのリストがあります。

 std::list<X*> xList;

必要なのはリストのサイズだけなので、私のメソッドはこのリストにデータを入力し、そのリストでsize()を呼び出してから、サイズを返します。

注:これが最善の解決策ではないことはわかっていますが、動的に割り当てられたオブジェクトのリストを提供するAPIを使用しており、これが唯一の方法です。

現在、valgrindはここにメモリリークがあると言っています。これは、リストにあるオブジェクトを削除しないためだと思います。

私はこれをやろうと思った:

std::list<X*>::iterator iter;
for (iter = xList.begin(); iter != xList.end(); ++iter)
{
    delete (*iter);
}

しかし、これはこれに対する最善の解決策ですか?

4

2 に答える 2

6

いいえ、最善の解決策はstd::list<std::unique_ptr<X>>代わりに使用することです。これで、オブジェクトは適切なときに自動的に削除されるため、気にする必要はありません。がstd::list破壊されると、Xそれが所有するオブジェクトも破壊されます。

于 2012-09-25T14:14:05.520 に答える
2

しかし、これはこれに対する最善の解決策ですか?

いいえ、最善の解決策はstd::list<std::shared_ptr<X> >代わりに使用することです。

于 2012-09-25T14:13:06.957 に答える