Nic*_*pat 1 c++ smart-pointers shared-ptr
例如:
shared_ptr<const shared_ptr<const int> > pp;
是相当令人生畏的......
const int ^ const ^ pp;
立刻让人想起原始指针等效
const int * const * pp;
Jam*_*lis 12
没有; 这将是一个坏主意.
C++最大的优势之一是有不同的方法来管理内存和其他资源,您可以在每种情况下选择最佳方式. shared_ptr只是一种方式; 其它包括auto_ptr,unique_ptr(从C++ 0X),以及intrusive_ptr和scoped_ptr(从升压).
许多其他库都有自己的智能指针类.制作shared_ptr"首选"智能指针并没有多大意义.
该^符号已被其他几种源自C和C++的语言使用.C++/CLI将其用于托管句柄,而Objective C将其用于块.
除了现有的答案所指出的,这是一个坏主意(tm)的一个原因是,这shared_ptr不是一个值得鼓励的事情.
它是一种在几个智能指针,它有一些重要的不足之处(这是远远超过任何其他广泛使用的智能指针慢,使用它可以导致内存泄漏,如果你不小心),这是严重滥用.
应该鼓励的是一般使用RAII :是否通过使用各种智能指针类(包括但不限于shared_ptr),或通过您自己的RAII包装资源或使用标准库容器来完成是无关紧要的.他们的关键是依靠RAII进行资源管理.
但是,语法等,因为这将提升shared_ptr到某些特殊的地位,其中它更不是重要的std::vector,std::unique_ptr,std::weak_ptr和所有其他极为有用的例子RAII标准库.
这会产生误导,只会加剧许多人已经过度依赖的荒谬过度依赖shared_ptr.
我通常shared_ptr只考虑最后的手段.如果可能的话,我更喜欢任何其他智能指针类,并且只有当它们都不能完成这项工作时,我才考虑使用它shared_ptr.Bjarne Stroustrup总体上谈到了共享所有权的相似之处.理想情况下,您的代码应具有更严格的所有权语义.shared_ptr在最后几个案例中,共享所有权确实是最好(或最不好)的选择.
另一个更客观的原因是C++在"核心语言"和"库"之间划清界限.对于int ^有效的东西,^必须以核心语言给予特殊处理,就像它一样*.
因此,shared_ptr它将不再是库组件,而是核心语言功能.
标准委员会试图尽可能地避免这种情况,使用经验法则,任何可以作为库实现的东西都应该实现为库.如果它不能作为库实现,也许不是将其添加为核心语言特性,而是更好地添加一些更通用的语言,以便将其实现为库.
但是shared_ptr作为库组件可以很好地实现.将它升级为核心语言几乎没有什么好处.