草庐IT

c++ - 将 std::unique_ptr 传递给构造函数以获取所有权

我想将std::unique_ptr传递给一个类的构造函数,该类将获得std::unique_ptr所拥有的数据的所有权。下面的方法foo和bar在编译器处理它们的方式方面是否有任何差异,从而使其中之一更可取?foo类:templateclassfoo{std::unique_ptrdata_;public:foo(std::unique_ptr&&data):data_{std::forward>(data)}{}};bar类:templateclassbar{std::unique_ptrdata_;public:bar(std::unique_ptrdata):data_{std

c++ - 混合 boost::optional 和 std::unique_ptr

我承认:我爱上了可选的概念。自从我发现它以来,我的代码质量有了很大的提高。明确变量是否有效比简单的错误代码和带内信号要好得多。它还让我不必担心必须阅读文档中的契约(Contract),或者担心它是否是最新的:代码本身就是契约(Contract)。就是说,有时我需要处理std::unique_ptr。这种类型的对象可能为空,也可能不是;在代码中的给定点不可能知道std::unique_ptr是否应该有值;不可能从代码中知道契约。我想以某种方式混合optional(可能与boost::optional)和std::unique_ptr,这样我就有一个动态分配的对象,具有范围破坏和适当的复制

c++ - auto_ptr 陷阱和误区

除了使用auto_ptr的所有已知好处之外,auto_ptr的“最坏做法”是什么?创建auto_ptr的STL约束器。auto_ptr不满足“CopyConstructable”要求。另请参阅ScottMeyer的“有效STL”,第8项。创建数组的auto_ptr销毁时,auto_ptr的析构函数使用“delete”(而不是“delete[]”)来销毁拥有的对象,因此此代码会产生未定义的行为:auto_ptrapi(newint[42]);在使用auto_ptr成员的类中没有处理copy-ctor和op=。人们可能会天真地认为通过使用auto_ptr成员不需要为类实现复制构造函数/赋值

c++ - 为什么 ptr_fun(tolower) 不能在 mingw 中编译?

我正在尝试使用QtCreator2.0.1编译以下程序:voidf(){stringa="abc";transform(a.begin(),a.end(),a.begin(),ptr_fun(tolower));}mingw抛出以下错误:没有匹配函数来调用ptr_fun()该函数在VC++2010Express中编译良好。mingw有什么问题?谢谢。 最佳答案 问题是函数模板引入的歧义templatecharTtolower(charTc,constlocale&loc);我猜mingw已经包含了间接来自您的程序包含的头文件之一,而

c++ - 将 unique_ptr 数组移动到另一个数组的正确方法

我有一个包含在std::unique_ptr中的数组,我想将内容移动到另一个相同类型的数组中。我是否需要编写一个循环来一个一个地移动元素,或者我可以使用类似std::move的东西吗?constintlength=10;std::unique_ptrdata(newint[length]);//Initialize'data'std::unique_ptrnewData(newint[length]);//Fill'newData'withthecontentsof'data'编辑:另外,如果数组大小不同怎么办? 最佳答案 给定的目

c++ - 正确使用 shared_ptr 消除跨 DLL 边界的释放

我正在阅读“Usingshared_ptrindll-interfaces”。在那篇文章中,phlipsy在他的回答结束时提出了一种方法,可以不跨DLL边界传递特定于实现的对象。基本上,这个想法是从DLL返回一个原始指针,并在带有该原始指针的EXE中初始化shared_ptr。我不认为这是正确的。为了简单起见,让我重新制作它的原型(prototype)。//wrongversion??//DLLObject*createObject(){returnnewObject;}//EXEstd::tr1::shared_ptrp(createObject());..当object被释放时,s

c++ - 如何获取对具有 shared_ptr 的对象的引用?

如何获取对具有shared_ptr的对象的引用到吗?(对于一个简单的类T) 最佳答案 operator*已经返回一个引用:T&ref=*ptr;或者,我想我可以举一个更有意义的例子:voiddoSomething(std::vector&v){v.push_back(3);}autop=std::make_shared>();//This:doSomething(*p);//Isjustasvalidasthis:vectorv;doSomething(v);(请注意,使用引用释放对象的引用当然是无效的。保留对对象的引用与保留sha

c++ - 单例模式 : different behavior of auto_ptr and unique_ptr

在实现工厂类时,我遇到了一个我无法理解的std::auto_ptr行为。我将问题简化为以下小程序,所以...让我们开始吧。考虑以下单例类:单例.h#ifndefSINGLETON_H_#defineSINGLETON_H_#include#includeclasssingleton{public:staticsingleton*get(){std::coutptr_;//staticstd::unique_ptrptr_;};#endif单例.cpp#includeostd::auto_ptrsingleton::ptr_(0);//std::unique_ptrsingleton::

C++如何从在构造函数上采用参数的类创建std::unique_ptr

我需要从一个类中创建一个std::unique_ptr,该类的构造函数采用一个参数。我找不到有关如何操作的引用资料。这是无法编译的代码示例:#include#include#include#includeclassMyClass{public:MyClass(std::stringname);virtual~MyClass();private:std::stringmyName;};MyClass::MyClass(std::stringname):myName(name){}MyClass::~MyClass(){}classOtherClass{public:OtherClass(

c++ - 返回 shared_ptr 时的引用计数

下面的代码是不是意味着当这个函数返回时,这个类里面的request对象仍然持有这个对象的引用?boost::shared_ptrRequestList::GetRequest(){boost::mutex::scoped_lock(listmtx);request=boost::shared_ptr(newRequest());returnrequest;}用过的:request=requests->GetRequest();//Refcountistwoonrequestobjectwhenitreturns??即使在完成上述分配后,我们在request上的引用计数仍然为2...其中