在C++标准草案(N3485)中,它声明如下:20.7.1.2.4unique_ptr观察者[unique.ptr.single.observers]typenameadd_lvalue_reference::typeoperator*()const;1Requires:get()!=nullptr.2Returns:*get().pointeroperator->()constnoexcept;3Requires:get()!=nullptr.4Returns:get().5Note:usetypicallyrequiresthatTbeacompletetype.你可以看到oper
std::unique_ptrp1(newint);std::unique_ptrp2(newint);p2=p1;这里似乎p1不再是“唯一的”,因为p2也引用了它这是合法的c++吗?unique_ptr有copy_semantics吗?如果不是,并且它只有移动语义,那么在将p1分配给p2之后是否将其设置为NULL?编辑:好的,所以正确的版本是p2=std::move(p1)据此,在此分配之后,p1无效?和auto_ptr的区别就在这里?明确指定所有权的转移比隐含的更安全,因为我猜想auto_ptr就是这种情况 最佳答案 std::
我正在尝试“现代化”一些现有代码。我有一个类,它当前有一个成员变量“Device*device_”。它在一些初始化代码中使用new创建实例,并在析构中有一个“deletedevice_”。该类的成员函数调用许多以Device*作为参数的其他函数。这很好用,但为了“现代化”我的代码,我认为我应该将变量更改为"std::unique_ptrdevice_"并删除对删除的显式调用,这使代码更安全,通常更好。我的问题是这个-我应该如何将device_变量传递给所有需要它作为参数的函数?我可以调用.get来获取每个函数调用中的原始指针。但这看起来很丑陋,并且浪费了一些首先使用unique_ptr
如果我理解正确,weak_ptr不会增加托管对象的引用计数,因此它不代表所有权。它只是让您访问一个对象,该对象的生命周期由其他人管理。所以我真的不明白为什么不能从unique_ptr构造weak_ptr,而只能从shared_ptr构造。有人能简单解释一下吗? 最佳答案 如果您考虑一下,weak_ptr必须引用对象本身以外的其他内容。这是因为对象可以不复存在(当没有更多的强指针指向它时)并且weak_ptr仍然必须引用包含对象不再存在的信息的东西。使用shared_ptr,该东西就是包含引用计数的东西。但是对于unique_ptr,
我想这是不言自明的-我似乎无法使用C++11功能,即使我认为我已经正确设置了所有内容-这可能意味着我没有。这是我的代码:#include#includeclassObject{private:intvalue;public:Object(intval){value=val;}intget_val(){returnvalue;}voidset_val(intval){value=val;}};intmain(){Object*obj=newObject(3);std::unique_ptrsmart_obj(newObject(5));std::coutget_val()这是我的g++版
与Boost中的情况一样,C++11提供了一些用于转换shared_ptr的函数:std::static_pointer_caststd::dynamic_pointer_caststd::const_pointer_cast然而,我想知道为什么没有unique_ptr的等效函数。考虑以下简单示例:classA{virtual~A();...}classB:publicA{...}unique_ptrpA(newB(...));unique_ptrqA=std::move(pA);//Thisislegalsincethereisnocastingunique_ptrpB=std::m
在我最近查看的一段代码中,它用g++-4.6编译得很好,我遇到一个奇怪的尝试创建一个std::shared_ptr来自std::unique_ptr:std::unique_ptrfoo...std::make_shared(std::move(foo));这对我来说似乎很奇怪。这应该是std::shared_ptr(std::move(foo));afaik,虽然我对Action并不十分熟悉(而且我知道std::move只是一个类型转换,没有任何Action)。在此SSC(NUC*)E上使用不同的编译器进行检查#includeintmain(){std::unique_ptrfoo(
我一直在使用pimpl成语制作一些对象,但我不确定是否使用std::shared_ptr或std::unique_ptr.我知道std::unique_ptr效率更高,但这对我来说不是什么大问题,因为这些对象无论如何都相对重量级,所以std的成本::shared_ptr而不是std::unique_ptr相对较小。我目前使用std::shared_ptr只是因为它具有额外的灵active。例如,使用std::shared_ptr允许我将这些对象存储在hashmap中以便快速访问,同时仍然能够将这些对象的拷贝返回给调用者(因为我相信任何迭代器或引用可能很快无效)。但是,这些对象实际上并没
我编写了一个静态工厂方法,它返回一个从另一个数据对象填充的新Foobar对象。我最近沉迷于所有权语义,想知道我是否通过让这个工厂方法返回一个unique_ptr来传达正确的信息。classFoobar{public:staticunique_ptrfactory(DataObjectdata);}我的目的是告诉客户端代码他们拥有指针。如果没有智能指针,我只会返回Foobar*。但是,我想强制删除此内存以避免潜在的错误,因此unique_ptr似乎是一个合适的解决方案。如果客户端想要延长指针的生命周期,他们只需在获得unique_ptr后调用.release()。Foobar*myFoo
我正在尝试初始化std::vector>以相当于BjarneStroustrup'sC++11FAQ中的示例的方式:usingnamespacestd;vector>vs{newstring{"Doug"},newstring{"Adams"}};//failsunique_ptrps{newstring{"42"}};//OK我看不出这种语法为什么会失败。这种初始化容器的方式有问题吗?编译器错误信息很大;我找到的相关部分如下:/usr/lib/gcc-snapshot/lib/gcc/i686-linux-gnu/4.7.0/../../../../include/c++/4.7.0