智能指针,当c++ 11不支持时,它不会转移所有权,也不会被共享
Smart pointer that does transfer of ownership and is not shared when C++11 is not an option
目前我正在解决boost::shared_ptr
的问题,但语义不太正确,因为我正在将成员从一个对象"移植"到另一个对象。我浏览了一下这个列表,但并没有太多收获。我的谷歌搜索也是如此。
本质上我正在寻找一个unique_ptr
实现与我的gcc4.2工作(因此限制不使用c++ 11)
您可以坚持使用std::auto_ptr
,直到Boost在新的Boost Move
库(c++ 03兼容)之上实现unique_ptr
。
查看此邮件列表流量d.d. 2011年11月10日:http://boost.2283326.n4.nabble.com/smart-ptr-Inclusion-of-unique-ptr-td4021667.html
Edit和Boost Interprocess有一个uniqe_ptr<>
类模板浮动:
- http://www.boost.org/doc/libs/1_48_0/doc/html/boost/interprocess/unique_ptr.html
根据您的实际需要,您可以考虑使用boost::scoped_ptr
。它与std::unique_ptr
非常相似,但它不能被移动(因为c++ 03不知道移动语义)。然而,它可以被交换。因此,当你想要转让所有权时,只需这样做:
boost::scoped_ptr<T> dummy;
dummy.swap(my_ptr);
// now you have basically transferred ownership from my_ptr to dummy
使用std::auto_ptr<</p>
llvm::OwningPtr -它有take
方法来获取所有权。
boost::shared_ptr with custom deleter.
这是我在单元测试中用来模拟Corba _var类行为的东西。
struct CondDel {
bool doDel;
CondDel() : doDel(true) {
}
template<typename T>
void operator()(T* p) {
if (doDel)
delete p;
}
};
class MyCorbaObj_var : public boost::shared_ptr<_objref_MyCorbaObj> {
public:
MyCorbaObj_var(_objref_MyCorbaObj* p) : boost::shared_ptr<_objref_MyCorbaObj>(p, CondDel()) {
}
_objref_MyCorbaObj* _retn() {
CondDel* cd = (CondDel*)_internal_get_deleter(typeid(CondDel));
cd->doDel = false;
return get();
}
};
如果你想复制类的对象来复制指向项,那么没有一种指针(auto_ptr, shared_ptr或裸指针)可以做你想做的事情,除非你做一些额外的工作。您需要自己管理复制。确保实现了复制构造函数和赋值操作符,以便它们克隆指向的项并将新指针存储在目标对象中。如果这样做,auto_ptr和shared_ptr都可以很好地工作。
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 如何将所有权从一个共享指针向量转移到另一个向量?
- 是否可以将所有权从void*转移到unique_ptr
- 返回soliden_ptr私人会员数据而无需转移所有权
- 将智能指针所有权转移到容器
- 将所有权从 unique_ptr<T,void(*)(T*)> 转移到 unique_ptr<const T,void(*)(const T*>
- 将原始指针的所有权转移到unique_ptr
- 互斥锁的所有权不会转移到另一个线程
- 复制构造函数以转移unique_ptr的所有权
- std::unique_ptr 来转移 const 对象的所有权
- 提升thread_group将unique_ptr的所有权转移到线程
- 将所有权从std::vector转移到std::shared_ptr
- 转移唯一所有权:unique_ptr与移动语义
- 在C++11中,将对象的所有权从一个unique_ptr转移到另一个unique _ptr
- 如何在C++或Winapi中转移同步对象的所有权
- 如何在返回元组时转移unique_ptr的所有权?
- 智能指针,当c++ 11不支持时,它不会转移所有权,也不会被共享
- 使用unique_ptr表示(非)所有权转移
- c++将结构体的所有权转移给函数
- 使用“放置新”转移对象所有权