c – 返回需要由智能指针保持的“指针”
我有一个项目,我想更多地使用智能指针.总的来说,我已经在这个目标上取得了成功.不过,我遇到了一件我不知道“最佳实践”的东西.
基本上我想从一个函数返回一个“指针”,但是要求用户把它保存在一个智能指针中.不仅如此,我不想授权一个特定的智能指针(共享与范围). 问题主要在于将scoped_ptr升级到shared_ptr似乎并不合适(这将是我认为的理想解决方案).我明白为什么他们没有这样做,因为它将允许转让所有权,这可能导致一些问题,如std :: auto_ptr有. 然而,转让所有权似乎是一个好主意.所以我的想法是这样的: // contrived example of factory pattern std::auto_ptr<A> func() { return std::auto_ptr<A>(new A); } 这样做可以“ok”,因为scoped_ptr和shared_ptr都具有从std :: auto_ptr获取所有权的构造函数. 所以我的问题是,这个好习惯吗?有更好的解决方案吗?我唯一能够提出的真正替代方法是使用模板模板作为返回值,如下所示: // similar to above example template <template <typename> class P> P<A> func() { return P<A>(new A); } 这实际上可以很好地工作,除了我认为需要一些工作来使它与scoped_ptr一起工作. 思考? 解决方法
使用std :: auto_ptr是好的做法,实际上建议使用
such example
由Bjarne Stroustrup. auto_ptr的移动语义为您提供了正确的工具来处理它. 例如: auto_ptr<Foo> make_foo() { return auto_ptr<Foo>(new Foo); } Foo *raw_pointer=make_foo().release(); shared_ptr<Foo> shared_pointer=make_foo(); auto_ptr<Foo> auto_pointer=make_foo(); 如果你返回shared_ptr你不能回退到正常的指针,用auto_ptr可以.您可以将auto_ptr升级到共享但不是其他方向. 另一个重要的一点是,shared_ptr使用原子引用计数,这要慢得多 P.S:scoped_ptr只是auto_ptr for poors的版本 – 它是不可复制的没有默认的constuctor.它更像是“不太混淆”的auto_ptr版本,与shared_ptr相比,它不在tr1中.一般使用没有太多的优点scoped_ptr超过auto_ptr (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |