Questions tagged «ownership-semantics»

11
智能指针:谁拥有对象?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊不清,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 C ++全部关于内存所有权(也称为所有权语义)。 动态分配的内存块的所有者负责释放该内存。因此,问题实际上变成了谁拥有记忆。 在C ++所有权中,原始指针被包装在其中,因此在一个良好的(IMO)C ++程序中,很少会看到原始指针传递(很少,不是永远不会)(因为原始指针没有推断出的所有权,因此我们可以不知道谁是内存的所有者,因此,如果不仔细阅读文档,就无法知道谁对内存负责。 相反,很少看到原始指针存储在类中,每个原始指针都存储在其自己的智能指针包装器中。(注意:如果您不拥有对象,则不应存储该对象,因为您不知道该对象何时会超出范围并被破坏。) 所以问题是: 人们遇到过哪种所有权语义? 哪些标准类用于实现这些语义? 您觉得它们在什么情况下有用? 让我们为每个答案保留一种类型的语义所有权,以便可以分别对它们进行表决。 摘要: 从概念上讲,智能指针很简单,简单的实现也很容易。我已经看到了许多尝试的实现,但是它们总是以某种偶然使用和示例不明显的方式被破坏。因此,我建议始终使用库中经过良好测试的智能指针,而不要自己动手。std::auto_ptr或Boost智能指针之一似乎可以满足我的所有需求。 std::auto_ptr<T>: 一个人拥有该对象。允许转让所有权。 用法:这允许您定义显示显式所有权转移的接口。 boost::scoped_ptr<T> 一个人拥有该对象。不允许转让所有权。 用法:用于显示明确的所有权。对象将由析构函数或明确重置后销毁。 boost::shared_ptr<T>(std::tr1::shared_ptr<T>) 多重所有权。这是一个简单的引用计数指针。当引用计数达到零时,对象将被销毁。 用法:一个对象可以具有多个编译器,且其生存期在编译时无法确定。 boost::weak_ptr<T>: 用于shared_ptr<T>可能发生指针循环的情况。 用法:仅当循环维护共享引用计数时,用于停止保留对象的循环。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.