私はQVector<QSharedPointer<SomeData> > DataVec
、大きなオブジェクト指向プロジェクトの 1 つのクラスのフィールドとして持っています。QSharedPointers によって制御される大きなメモリが割り当てられているコード部分のサイクル実行中に、プログラムでメモリ オーバーフローが発生します。
プログラムの実行サイクル中にDataVec
、
DataVec.push_back(QSharedPointer<SomeData>(new SomeData()));
QSharedPointer
呼び出し後に削除(解放)されますDataVec.pop.back()
か?DataVec.clear()
違うと思う。明示的にデストラクタを呼び出す必要がありますQSharedPointer
(Qt の boost::shared_ptr::reset() のようなメソッドも表示されません)。関係するインスタンスへのポイントSomeData
がなくなると、デフォルトのデストラクタ (SomeData はフィールドとして標準の Qt コンテナのみを持つ) が呼び出され、メモリが解放されます。今、私はするだけです: どうやら、解放されていないデータへのポインターを失っているようです (実行後、valgrind はブロックを確実に失ったことを示しており、それらはここから発生したと思います)。QSharedPointers
SomeData
pop_back()
それで、最後に、私は正しいですか?また、コンテナから正しい方法で削除するにはどうすればよいQSharedPointer
ですか?
編集 1: Qt の boost::shared_ptr::reset() のようなメソッドはQSharedPointer::clear()
.