Tag: 所有权语义

不好的做法,像所有权语义返回unique_ptr的原始指针?

我写了一个静态工厂方法,返回从另一个数据对象填充新的Foobar对象。 我最近一直痴迷于所有权语义,并想知道是否通过让这个工厂方法返回一个unique_ptr传递正确的消息。 class Foobar { public: static unique_ptr<Foobar> factory(DataObject data); } 我的意图是告诉客户端代码,他们拥有指针。 没有一个聪明的指针,我只会返回Foobar* 。 但是,我想强制删除这个内存以避免潜在的错误,所以unique_ptr看起来是一个合适的解决scheme。 如果客户端想要延长指针的生命周期,他们只要调用.release()一旦得到unique_ptr 。 Foobar* myFoo = Foobar::factory(data).release(); 我的问题分两部分: 这种方法是否传达了正确的所有权语义? 这是一个“坏习惯”返回unique_ptr而不是一个原始指针?

智能指针:或谁拥有你的宝贝?

C ++全是关于内存所有权的 又名“ 所有权语义 ” 一块dynamic分配的内存的所有者负责释放该内存。 所以这个问题真的成了谁拥有的记忆。 在C ++中,所有权由一个RAW指针所包含的内部typeslogging,因此在一个好的(IMO)C ++程序中,很less见到从RAW指针传来的RAW指针(因为RAW指针没有推断的所有权,所以我们不能告诉谁拥有记忆,因此没有仔细阅读文件,你不能分辨谁是负责所有权)。 反过来,很less见到存储在一个类中的RAW指针,每个RAW指针都存储在它自己的SMART指针包装器中。 ( 注意:如果你不拥有一个对象,你不应该存储它,因为你不知道什么时候它会超出范围并被销毁。) 所以问题是: 人们遇到什么types的所有权语义? 用什么标准的类来实现这些语义? 什么情况下你觉得他们有用吗? 让我们为每个答案保留一种语义所有权,这样他们可以分别进行投票 概要: 从概念上讲,智能指针是简单的,一个简单的实现很容易。 我曾经见过很多尝试的实现,但是它们总是以某种方式被打破,这对于偶然使用和例子来说并不明显。 因此,我build议从图书馆总是使用经过良好testing的“智能指针”,而不是自己动手。 std :: auto_ptr或其中一个boost智能指针似乎涵盖了我所有的需求。 的std :: auto_ptr的<T>: 一个人拥有这个物体。 但是允许所有权转让。 用法: ====== 这使您可以定义显示所有权的显式转移的接口。 升压:: scoped_ptr的<T> 一个人拥有这个物体。 不允许转让所有权。 用法: ====== 用于显示明确的所有权。 对象将被析构函数销毁或显式重置。 boost :: shared_ptr <T>(std :: tr1 :: shared_ptr <T>) 多重所有权。 这是一个简单的引用计数指针。 当引用计数达到零时,对象被销毁。 用法: ====== […]