草庐IT

weak_ptr_cast

全部标签

c++ - 错误 : ‘unique_ptr’ is not a member of ‘std’

我想这是不言自明的-我似乎无法使用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++版

c++ - unique_ptr 的动态转换

与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

c++ - shared_ptr : horrible speed

在比较指针的两种变体(经典指针与shared_ptr)时,我对程序运行速度的显着提高感到惊讶。为了测试2DDelaunay增量插入算法已被使用。编译器设置:VS2010(release)/O2/MD/GL,W7Prof,CPU3.GHZDualCore结果:shared_ptr(C++0x00):N[points]t[sec]1000006200000113000001690000036指针:N[points]t[sec]1000000,5200000130000029000004shared_ptr版本的运行时间大约长10倍。这是编译器设置造成的还是C++0x00shared_ptr

c++ - 从 unique_ptr 创建 shared_ptr

在我最近查看的一段代码中,它用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(

c++ - 我应该使用 shared_ptr 还是 unique_ptr

我一直在使用pimpl成语制作一些对象,但我不确定是否使用std::shared_ptr或std::unique_ptr.我知道std::unique_ptr效率更高,但这对我来说不是什么大问题,因为这些对象无论如何都相对重量级,所以std的成本::shared_ptr而不是std::unique_ptr相对较小。我目前使用std::shared_ptr只是因为它具有额外的灵active。例如,使用std::shared_ptr允许我将这些对象存储在hashmap中以便快速访问,同时仍然能够将这些对象的拷贝返回给调用者(因为我相信任何迭代器或引用可能很快无效)。但是,这些对象实际上并没

c++ - dynamic_cast的实际使用?

我有一个关于dynamic_cast运算符的非常简单的问题。我知道这用于运行时类型识别,即在运行时了解对象类型。但是根据您的编程经验,您能否给出一个必须使用此运算符的真实场景?不使用有什么困难? 最佳答案 玩具示例诺亚方舟应作为不同类型动物的容器。由于方舟本身并不关心猴子、企鹅和蚊子之间的区别,所以你定义了一个类Animal,派生类Monkey,Penguin,和Mosquito从它,并将它们中的每一个存储为Animal在方舟里。一旦洪水结束,诺亚想将动物分布在地球上它们所属的地方,因此需要更多关于储存在他方舟中的通用动物的知识。例

c++ - 为原始指针(如所有权语义)返回 unique_ptr 的坏习惯?

我编写了一个静态工厂方法,它返回一个从另一个数据对象填充的新Foobar对象。我最近沉迷于所有权语义,想知道我是否通过让这个工厂方法返回一个unique_ptr来传达正确的信息。classFoobar{public:staticunique_ptrfactory(DataObjectdata);}我的目的是告诉客户端代码他们拥有指针。如果没有智能指针,我只会返回Foobar*。但是,我想强制删除此内存以避免潜在的错误,因此unique_ptr似乎是一个合适的解决方案。如果客户端想要延长指针的生命周期,他们只需在获得unique_ptr后调用.release()。Foobar*myFoo

c++ - std::unique_ptr 用于需要免费的 C 函数

想想一个C函数,它返回必须是freed的东西,例如POSIX的strdup()。我想在C++11中使用该函数并避免任何泄漏的机会,这是正确的方法吗?#include#include#includeintmain(){charconst*t{"Histackoverflow!"};std::unique_ptrt_copy{strdup(t),std::free};std::cout假设它是有道理的,是否可以对非指针使用类似的模式?例如对于返回int?的POSIX函数open 最佳答案 您所拥有的东西极有可能在实践中发挥作用,但并非完

c++ - unique_ptr::release() 是否调用析构函数?

这段代码正确吗?autov=make_unique(12);v.release();//isthispossible?是否相当于delete的原始指针? 最佳答案 不,代码会导致内存泄漏。release用于释放托管对象的所有权而不删除它:autov=make_unique(12);//managestheobjectint*raw=v.release();//pointertono-longer-managedobjectdeleteraw;//needsmanualdeletion除非您有充分的理由在没有安全网的情况下处理原始内存

C++在 map 中插入unique_ptr

我有一个ObjectArray类型的C++对象typedefmap>ObjectArray;为Class1类型的新对象创建unique_ptr并将其插入ObjectArray类型的对象的语法是什么? 最佳答案 首先,如果它是一个映射而不是一个数组,我不会称它为ObjectArray。无论如何,你可以这样插入对象:ObjectArraymyMap;myMap.insert(std::make_pair(0,std::unique_ptr(newClass1())));或者这样:ObjectArraymyMap;myMap[0]=std