[C++] C ++ std :: queue :: pop()はデストラクタを呼び出します。 どのようなポインタ型ですか?


Answers

ポインタ自身は実際にはデストラクタを持たないので、ポインタを含むキューでpop()を呼び出すと、ポインタが指すオブジェクトのデストラクタが呼び出されません。

Question

私はスレッドセーフなキューを作るためにテンプレートクラスとしてラップされているstd::queueを持っています。 私はこのクラスの2つのバージョンを持っています:値型を格納するもの、ポインタ型を格納するものです。

ポインタ型の場合、破壊時にキューの要素を削除するのに問題があります。 その理由は、アイテムをキューから安全に削除する方法がわからないからです。

キューから要素を削除する唯一の方法は、 pop()を呼び出すことだと、 この参照は(空白なので、実際には状態ではないと思いますpop() 。 このリファレンスでは、 pop()がアイテムのデストラクタを呼び出しているとも言います。

これは、実際に集約を指しているかもしれないし、指していないかもしれないので、私のポインタ型に問題を引き起こす。 それらのうちの1つが集約を指している場合、それらはすべて実行されますが、ラッパーがテンプレート化されているため、どのタイプ(集約または非集約)が処理されているかは保証されません。

したがって、 pop()がデストラクタを呼び出すと、どうなりますか? すべてが確実に削除され、メモリの割り当てが適切に解除されるようにするにはどうすればよいですか?

最後に、私の解決策はARM9用の古いバージョンのGCCを使用しています。 私はこれを支配していない。 私はそこに役立つスマートなポインタとコンテナを持っているライブラリがあることを理解していますが、私には限界があります。




Links