我记得斯科特·迈耶斯教过我
func(shared_ptr(new P), shared_ptr(new Q));
很危险,因为(如果我没记错的话)内存分配、引用计数(构造)和函数参数分配的顺序允许泄漏(理论上?)在极少数情况下出现。为了防止这种情况,应该将 in 封装在一个函数调用中,例如 in 。 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++ 编译器怎么样?
有没有人在他的特定平台上观察到这种行为?