草庐IT

non-unique

全部标签

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

c++ - std::unique_ptr::get 有什么意义

std::unique_ptr::get是否首先违背了拥有unique_ptr的目的?我本来希望这个函数改变它的状态,所以它不再持有指针。std::unique_ptr::get有实际用处吗? 最佳答案 std::unique_ptr安全地提供唯一所有权语义。然而,这并不排除需要non-owning指针。std::shared_ptr有一个非拥有对应物,std::weak_ptr。原始指针作为std::unique_ptr的非拥有对应物运行。 关于c++-std::unique_ptr:

c++ - unique_ptr 到派生类作为函数的参数,该函数将 unique_ptr 带到基类

我正在尝试使用unique_ptr到接受unique_ptr的函数中的派生类到基类。比如:classBase{};classDerived:publicBase{};voidf(unique_ptrconst&base){}…unique_ptrderived=unique_ptr(newDerived);f(derived);如果我理解thisanswer正确地,这段代码应该可以工作,但它会导致以下编译错误:errorC2664:'f':cannotconvertparameter1from'std::unique_ptr'to'conststd::unique_ptr&'Intel

c++ - boost::scoped_ptr<T> 和 std::unique_ptr<T> 之间的区别

是boost::scoped_ptr之间的唯一区别和std::unique_ptr事实std::unique_ptr具有移动语义,而boost::scoped_ptr只是一个get/reset智能指针? 最佳答案 不,但这是最重要的区别。另一个主要区别是unique_ptr可以有一个析构函数对象,类似于shared_ptr能够。不像shared_ptr,析构函数类型是unique_ptr的一部分的类型(分配器是STL容器类型的一部分)。一个constunique_ptr可以有效地完成scoped_ptr的大部分工作可以做;确实,不像

c++ - shared_ptr<> 对 weak_ptr<> 就像 unique_ptr<> 对...什么?

在C++11中,您可以使用shared_ptr建立与对象或变量的所有权关系和weak_ptr以非拥有的方式安全地引用该对象。您也可以使用unique_ptr建立与对象或变量的所有权关系。但是,如果其他非拥有对象也想引用该对象怎么办?weak_ptr在这种情况下没有帮助。原始指针很有帮助,但也带来了各种缺点(例如,它们可以是automaticallyinitializedtonullptr,但这是通过与std::*_ptr类型不一致的技术来实现的)。weak_ptr的等价物是什么?对于通过unique_ptr拥有的对象的非拥有引用?这是一个清晰的示例,类似于我正在开发的游戏中的某些内容。

c++ - C/C++ : switch for non-integers

很多时候我需要根据一个非POD常量元素的值来选择做什么,像这样:switch(str){case"foo":...case"bar":...default:...}遗憾的是switch只能与整数一起使用:错误:开关量不是整数。实现这样的事情最简单的方法是拥有一个ifs序列:if(str=="foo")...elseif(str=="bar")...else...但是这个解决方案看起来很脏,应该花费O(n),其中n是案例的数量,而在最坏的情况下,使用二分搜索,这段代码可能花费O(logn)。使用一些数据结构(如Maps)可以获得一个表示字符串的整数(O(logn)),然后使用O(1)sw

c++ - unique_ptr boost 等效?

在boost库中是否有C++1x的std::unique_ptr的等效类?我正在寻找的行为是能够拥有一个异常安全的工厂函数,就像这样......std::unique_ptrcreate_base(){returnstd::unique_ptr(newDerived);}voidsome_other_function(){std::unique_ptrb=create_base();//Dosomestuffwithbthatmayormaynotthrowanexception...//Nowbisdestructedautomagically.}编辑:现在,我正在使用这个hack,

c++ - std::unique_ptr 的自定义删除器如何工作?

根据N3290,std::unique_ptr在其构造函数中接受一个删除器参数。但是,我无法在Windows中使用VisualC++10.0或MinGWg++4.4.1,在Ubuntu中也无法使用g++4.6.1。因此,我担心我对它的理解不完整或错误。我看不出明显被忽略的删除器参数的意义,所以任何人都可以提供一个工作示例吗?最好我也想看看unique_ptrp=unique_ptr(newDerived)是如何工作的.可能使用标准中的一些措辞来支持示例,即,无论您使用什么编译器,它实际上都做了它应该做的事情? 最佳答案 这在MSVC

c++ - GNU 编译器警告 "class has virtual functions but non-virtual destructor"

我在C++中定义了一个接口(interface),即一个只包含纯虚函数的类。我想明确禁止接口(interface)的用户通过指向接口(interface)的指针删除对象,所以我为接口(interface)声明了一个protected非虚拟析构函数,类似于:classITest{public:virtualvoiddoSomething()=0;protected:~ITest(){}};voidsomeFunction(ITest*test){test->doSomething();//ok//deletingobjectisnotallowed//deletetest;}GNU编译器