草庐IT

Unique_ptr

全部标签

c++ - 如何从 boost::shared_ptr 释放指针?

boost::shared_ptr可以释放存储的指针而不删除它吗?我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个boost智能指针类可以让我释放指针?我希望你不要说使用auto_ptr:) 最佳答案 不要。Boost的常见问题解答条目:Q.Whydoesn'tshared_ptrprovidearelease()function?A.shared_ptrcannotgiveawayownershipunlessi

c++ - 如何从 boost::shared_ptr 释放指针?

boost::shared_ptr可以释放存储的指针而不删除它吗?我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个boost智能指针类可以让我释放指针?我希望你不要说使用auto_ptr:) 最佳答案 不要。Boost的常见问题解答条目:Q.Whydoesn'tshared_ptrprovidearelease()function?A.shared_ptrcannotgiveawayownershipunlessi

c++ - 对 unique_ptrs 集的原始指针查找

我经常发现自己想写这样的代码:classMyClass{public:voidaddObject(std::unique_ptr&&newObject);voidremoveObject(constObject*target);private:std::set>objects;};然而,std::set接口(interface)的大部分内容对于std::unique_ptrs来说是无用的,因为查找函数需要std::unique_ptr参数(我显然没有,因为它们归集合本身所有).我可以想到两个主要的解决方案。创建一个临时的unique_ptr用于查找。例如,上面的removeObject

c++ - 对 unique_ptrs 集的原始指针查找

我经常发现自己想写这样的代码:classMyClass{public:voidaddObject(std::unique_ptr&&newObject);voidremoveObject(constObject*target);private:std::set>objects;};然而,std::set接口(interface)的大部分内容对于std::unique_ptrs来说是无用的,因为查找函数需要std::unique_ptr参数(我显然没有,因为它们归集合本身所有).我可以想到两个主要的解决方案。创建一个临时的unique_ptr用于查找。例如,上面的removeObject

c++ - shared_ptr 的别名构造函数是干什么用的?

在此页面(http://www.cplusplus.com/reference/memory/shared_ptr/)的第5段中,它说:Additionally,shared_ptrobjectscanshareownershipoverapointerwhileatthesametimepointingtoanotherobject.Thisabilityisknownasaliasing(seeconstructors),andiscommonlyusedtopointtomemberobjectswhileowningtheobjecttheybelongto.Becauseof

c++ - shared_ptr 的别名构造函数是干什么用的?

在此页面(http://www.cplusplus.com/reference/memory/shared_ptr/)的第5段中,它说:Additionally,shared_ptrobjectscanshareownershipoverapointerwhileatthesametimepointingtoanotherobject.Thisabilityisknownasaliasing(seeconstructors),andiscommonlyusedtopointtomemberobjectswhileowningtheobjecttheybelongto.Becauseof

c++ - 可以定义一个完全通用的 swap() 函数吗?

以下片段:#include#includenamespacefoo{templatevoidswap(T&a,T&b){Ttmp=std::move(a);a=std::move(b);b=std::move(tmp);}structbar{};}voidbaz(){std::unique_ptrptr;ptr.reset();}不为我编译:$g++-std=c++11-cfoo.cppInfileincludedfrom/usr/include/c++/5.3.0/memory:81:0,fromfoo.cpp:1:/usr/include/c++/5.3.0/bits/unique

c++ - 可以定义一个完全通用的 swap() 函数吗?

以下片段:#include#includenamespacefoo{templatevoidswap(T&a,T&b){Ttmp=std::move(a);a=std::move(b);b=std::move(tmp);}structbar{};}voidbaz(){std::unique_ptrptr;ptr.reset();}不为我编译:$g++-std=c++11-cfoo.cppInfileincludedfrom/usr/include/c++/5.3.0/memory:81:0,fromfoo.cpp:1:/usr/include/c++/5.3.0/bits/unique

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

我一直认为std::unique_ptr与使用原始指针相比没有开销。但是,编译如下代码#includevoidraw_pointer(){int*p=newint[100];delete[]p;}voidsmart_pointer(){autop=std::make_unique(100);}使用g++-std=c++14-O3生成以下程序集:raw_pointer():subrsp,8movedi,400calloperatornew[](unsignedlong)addrsp,8movrdi,raxjmpoperatordelete[](void*)smart_pointer():

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

我一直认为std::unique_ptr与使用原始指针相比没有开销。但是,编译如下代码#includevoidraw_pointer(){int*p=newint[100];delete[]p;}voidsmart_pointer(){autop=std::make_unique(100);}使用g++-std=c++14-O3生成以下程序集:raw_pointer():subrsp,8movedi,400calloperatornew[](unsignedlong)addrsp,8movrdi,raxjmpoperatordelete[](void*)smart_pointer():