C + + 完全是关于内存所有权的——也就是 所有权语义。
动态分配的内存块的所有者有责任释放该内存。所以问题变成了谁拥有这段记忆。
在 C + + 的所有权类型中,生的指针被封装在内部,因此在一个好的(IMO) C + + 程序中,很少看到原始指针传递(rare,而不是 永远不会)(因为原始指针没有推断出的所有权,所以我们不能判断谁拥有内存,因此如果不仔细阅读文档,你就不能判断谁对所有权负责)。
相反,很少看到原始指针存储在类中,每个原始指针都存储在自己的智能指针包装器中。(注意:如果你不拥有一个对象,你就不应该存储它,因为你不知道它什么时候会超出作用域并被销毁。)
So the question:
让每个答案保持一种语义所有权类型,这样它们就可以单独上下投票。
Conceptually, smart pointers are simple and a naive implementation is easy. I have seen many attempted implementations, but invariably they are broken in some way that is not obvious to casual use and examples. Thus I recommend always using well tested smart pointers from a library rather than rolling your own. std::auto_ptr
or one of the Boost smart pointers seem to cover all my needs.
std::auto_ptr<T>
:物品归单个人所有,允许转让所有权。
Usage: This allows you to define interfaces that show the explicit transfer of ownership.
boost::scoped_ptr<T>
物品属于个人所有,不允许转让所有权。
用法: 用于显示明确的所有权。对象将被析构函数销毁或在显式重置时销毁。
boost::shared_ptr<T>
(std::tr1::shared_ptr<T>
)多个所有权。这是一个简单的引用计数指针。当引用计数达到零时,对象被销毁。
用法: 当一个对象可以有多个生存期不能在编译时确定的所有者时。
在可能发生指针循环的情况下与 shared_ptr<T>
一起使用。
用法: 当只有循环在维护共享重新计数时,用于阻止循环保留对象。