スコット・マイヤーズが教えてくれたのを覚えています
func(shared_ptr(new P), shared_ptr(new Q));
(私の記憶が正しければ)メモリ割り当て、参照カウント(構築)、および関数パラメータへの割り当ての順序により、まれな状況で(理論的には?)リークが発生する可能性があるためです。これを防ぐには、関数呼び出しでをカプセル化する必要があります。 shared_ptr
make_shared()
func(make_shared<P>(), make_shared<Q>());
ここにもそれに関するいくつかの議論があります。
フィールドに(現在の)コンパイラがあるかどうかを知りたいのですが、特定のシステムでは、実際にいくつかのエラーケースでいくつかの穴が残る可能性がありますか? それとも、それらの時代は過ぎ去りましたか、それとも理論上のものに過ぎませんでしたか?
最も興味深いのは、これらのいずれかにその問題があるかどうかを知ることです。
- g++ 4.x または g++ 2.95、Linux i386、x64、ARM、m68k、または任意の Windows
- i368、x64、または ARM 上の Visual C++
- Linux 上の Clang/LLVM、またはそのプラットフォームのいずれか
- Sun または IBM、HP-UX の C++ コンパイラはどうですか?
特定のプラットフォームでこの動作を観察した人はいますか?