3

std::shared_ptrにを保存することは必須boost::circular_bufferですか?boost::circular_buffer<T*>循環キューを実行した場合delete、n + 1番目の挿入後に自動的にポップされる要素はありますか?

そうでない場合、ポップされた要素を削除してメモリリークを管理するにはどうすればよいですか?

4

1 に答える 1

2

もちろん、sを保存することは必須shared_ptrではありません。たとえば、次のような単純なものなど、さまざまなタイプを保存できます。int

ポインタを格納する場合、コンテナはそれらがヒープ上のオブジェクトを指していることを認識しないため、既存の要素を新しい要素で上書きするときにそれらを削除しないため、ポインタを安全に削除できるかどうかを知ることはできません。ポインタは新しい値で上書きされます。それがヒープ上のオブジェクトへの最後のポインタである場合は、メモリリークが発生しています。これは、ページの4分の1未満でかなり明確に文書化されています。たぶんあなたはドキュメントを読むべきです。

ヒープオブジェクトへのポインタを格納し、それらを管理する他の方法がない場合は、そうです。格納することshared_ptr<T>は賢明です(ただし必須ではありません)。

于 2012-07-31T19:28:58.957 に答える