草庐IT

copy-constructor

全部标签

c++ - 使用哪个 : move assignment operator vs copy assignment operator

我似乎不明白为什么要使用移动赋值运算符:CLASSA&operator=(CLASSA&&other);//moveassignmentoperator结束了,复制赋值运算符:CLASSA&operator=(CLASSAother);//copyassignmentoperator移动赋值运算符仅采用r值引用,例如CLASSAa1,a2,a3;a1=a2+a3;在复制赋值运算符中,other可以是使用复制构造函数或移动构造函数的构造函数(如果other是用右值初始化的,它可以是移动构造的——如果move-constructor定义了——)。如果它是copy-constructed,我

c++ - 在 constexpr 构造函数中复制数组

我用constexpr复制构造函数编写了一个类。(在示例中它是一个结构,以使其更简单。)其中一个字段是一个数组。我也想复制。structFoo{staticconstexprintSIZE=4;constexprFoo()=default;constexprFoo(constFoo&foo):arr{foo.arr[0],foo.arr[1],foo.arr[2],foo.arr[3]},bar(foo.bar+1){}intarr[SIZE]={0,0,0,0};intbar=0;};我的版本有效,但不可扩展。如果我更改SIZE,我必须修改构造函数。此外,代码看起来很难看。在构造函数

c++ - Template类拷贝构造函数的写法

如何为模板类编写复制构造函数。因此,如果模板参数是另一个用户定义的类,它的复制构造函数也会被调用。下面是我的课templateclassVertex{public:Vertex(_TyVin):m_Label(in){}~Vertex(){}booloperator 最佳答案 要么a)根本不是,只依赖于编译器提供的默认值;或b)仅调用成员的复制构造函数:templatestructFoo{Tvar;Foo(constFoo&rhs):var(rhs.var){}};重点当然是编译器提供的默认拷贝构造函数做了完全一样的事情:它一个一个

c++ - 使用智能指针复制构造函数

我有一节课std::unique_ptr作为类(class)成员。我想知道如何正确定义复制构造函数,因为我收到以下编译器错误消息:errorC2248:std::unique_ptr::unique_ptr:cannotaccessprivatememberdeclaredinclass'std::unique_ptr.我的类(class)设计类似于:templateclassFoo{public:Foo(){};Foo(Bar*,int);Foo(constFoo&);~Foo(){};voidswap(Foo&);Foooperator=(Foo);private:std::uni

C++ 返回对象拷贝

我写了下面的代码:classMyObjectHolder{public:std::vectorgetMyObject()const{returnmyObject;}private:std::vectormyObject;};在我的程序的某些时候,我尝试使用getMyObject方法和用途仅const检索对象的方法:conststd::vectormyObject=myObjectHolder.getMyObject();myObject.size();inta=myObject.front();现在,编译器是否有可能优化此代码,以便没有std::vector的拷贝完成了吗?Isitso

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

我收到以下错误:[matt~]g++-std=c++11main.cpp-DCOPY_AND_SWAP&&./a.outmain.cpp:Infunction‘intmain(int,constchar*const*)’:main.cpp:101:24:error:ambiguousoverloadfor‘operator=’in‘move=std::move((*©))’main.cpp:101:24:note:candidatesare:main.cpp:39:7:note:Test&Test::operator=(Test)main.cpp:52:7:note:Test&

c++ - 智能指针类的简单实现

在C++Primer13.5.1一书中,它使用Use-CountClass实现了一个SmartPointerClass。它们的实现如下:使用计数类//privateclassforusebyHasPtronlyclassU_Ptr{friendclassHasPtr;int*ip;size_tuse;U_Ptr(int*p):ip(p),use(1){}~U_Ptr(){deleteip;}};智能指针类/*smartpointerclass:takesownershipofthedynamicallyallocatedobjecttowhichitisboundUsercodemus

c++ - 将代码从 C++03 迁移到 C++11 : should I be cautious about the implicit default move constructor?

我有一个代码库,我想从C++03切换到C++11。据我所知,某些类将通过具有隐式默认移动构造函数(以及随之而来的移动赋值运算符)而从更改中受益。虽然我完全同意(我什至认为这是一件好事),但我有点担心这种隐式构造函数可能对我拥有的某些不可复制类产生的影响。我举的一个例子是一个类,它包装了libiconv的iconv_t句柄以利用RAII。更明确地说,类如下:classiconv_wrapper{public:iconv_wrapper():m_iconv(iconv_open()){}~iconv_wrapper(){iconv_close(m_iconv);}private://Not

c++ - 为什么 std::copy_n 采用模板参数而不是 std::size_t?

这么简单的问题。templateOutputItcopy_n(InputItfirst,Sizecount,OutputItresult);为什么std::copy_n为要复制的元素数量取一个类型,而不是简单地std::size_t?我只是想不出一个理由。templateOutputItcopy_n(InputItfirst,std::size_tcount,OutputItresult); 最佳答案 在这种情况下,推测原始原理大多是徒劳的,但对于这种设计copy_n可以用负计数调用,例如int或ptrdiff_ttype,在这种情

c++ - 谷歌模拟 : "no appropriate default constructor available"?

将VisualStudio2010C++与googlemock结合使用。我正在尝试使用我创建的模拟,但在线上遇到编译器错误:EmployeeFakeemployeeStub;错误是:1>c:\someclasstests.cpp(22):errorC2512:'MyNamespace::EmployeeFake':noappropriatedefaultconstructoravailable假员工:classEmployeeFake:publicEmployee{public:MOCK_CONST_METHOD0(GetSalary,double());}员工:classEmploy