草庐IT

copy-constructor

全部标签

c++ - 从复制构造函数调用默认赋值运算符是不好的形式吗?

考虑一个需要复制的类。拷贝中的绝大多数数据元素必须严格反射(reflect)原始数据,但是只有少数元素的状态不需要保留,需要重新初始化。从复制构造函数调用默认赋值运算符是不是不好的形式?默认的赋值运算符可以很好地处理普通旧数据(int、double、char、short)以及用户定义的每个赋值运算符的类。指针需要单独处理。一个缺点是,由于没有执行额外的重新初始化,这种方法会使赋值运算符失效。也不可能禁用赋值运算符,因此打开了用户使用不完整的默认赋值运算符Aobj1,obj2;创建损坏类的选项;对象2=对象1;/*结果可能是一个错误初始化的obj2*/.最好放宽对a(orig.a),b(

c++ - 是否可以在 C++ 中将 std::map 与没有任何复制运算符的类一起使用?

我正在使用一个没有任何复制运算符的类(对象):它现在基本上无法复制。我有一个std::mapobjects列出具有int标识符的对象的变量。如何在不使用复制运算符的情况下向此map添加对象?我试过了objects.insert(std::pair);但这不会编译。我只想使用默认构造函数在map内创建我的对象,但编写objects[0];失败...谢谢:) 最佳答案 在C++03中,存储在STL容器中的对象必须是可复制的。这是因为STL容器的std::allocator实际上使用new操作符的放置版本来复制构造预分配内存块中的对象,这

c++ - 是否可以在 C++ 中将 std::map 与没有任何复制运算符的类一起使用?

我正在使用一个没有任何复制运算符的类(对象):它现在基本上无法复制。我有一个std::mapobjects列出具有int标识符的对象的变量。如何在不使用复制运算符的情况下向此map添加对象?我试过了objects.insert(std::pair);但这不会编译。我只想使用默认构造函数在map内创建我的对象,但编写objects[0];失败...谢谢:) 最佳答案 在C++03中,存储在STL容器中的对象必须是可复制的。这是因为STL容器的std::allocator实际上使用new操作符的放置版本来复制构造预分配内存块中的对象,这

c++ - 为什么复制构造函数会有多个参数?

$12.8/2-'Anon-templateconstructorforclassXisacopyconstructorifitsfirstparameterisoftypeX&,constX&,volatileX&orconstvolatileX&,andeithertherearenootherparametersorelseallotherparametershavedefaultarguments(8.3.6).106)'到目前为止,我还没有遇到任何需要声明带有附加默认参数的复制构造函数的示例。想知道这种带有多个参数的复制构造函数的实时使用情况。 最

c++ - 为什么复制构造函数会有多个参数?

$12.8/2-'Anon-templateconstructorforclassXisacopyconstructorifitsfirstparameterisoftypeX&,constX&,volatileX&orconstvolatileX&,andeithertherearenootherparametersorelseallotherparametershavedefaultarguments(8.3.6).106)'到目前为止,我还没有遇到任何需要声明带有附加默认参数的复制构造函数的示例。想知道这种带有多个参数的复制构造函数的实时使用情况。 最

C++ 11 : is a defaulted copy constructor user declared?

我猜是这样,但我正在寻找C++11语言律师来确认我的印象。下面的课是真的吗structX{X(){}X(Xconst&)=default;};不会自动启用移动,即获取X(X&&)和operator=(X&&),因为它的复制构造函数是“用户声明的”,即使它看起来等同于structX{};这将获得X(Xconst&)和X(X&&)等,在使用时隐式声明和(平凡)定义。 最佳答案 来自标准:8.4.2Explicitly-defaultedfunctions[dcl.fct.def.default]4-[...]Aspecialmember

C++ 11 : is a defaulted copy constructor user declared?

我猜是这样,但我正在寻找C++11语言律师来确认我的印象。下面的课是真的吗structX{X(){}X(Xconst&)=default;};不会自动启用移动,即获取X(X&&)和operator=(X&&),因为它的复制构造函数是“用户声明的”,即使它看起来等同于structX{};这将获得X(Xconst&)和X(X&&)等,在使用时隐式声明和(平凡)定义。 最佳答案 来自标准:8.4.2Explicitly-defaultedfunctions[dcl.fct.def.default]4-[...]Aspecialmember

c++ - SFINAE 离开了一个拷贝构造函数

在某些条件下,我希望SFINAE去掉类模板的复制构造函数和复制赋值运算符。但是如果我这样做,就会生成一个默认的复制构造函数和一个默认的赋值运算符。SFINAE是基于我作为类模板参数传递的标签完成的。问题是,SFINAE仅适用于模板,而复制构造函数/赋值运算符不能是模板。是否有解决方法? 最佳答案 此解决方案使用有条件不可复制的基类(通过将复制构造函数和复制赋值运算符显式标记为已删除)。templatestructNoCopy;templatestructNoCopy{//C++11andlater:markingasdeleted.

c++ - SFINAE 离开了一个拷贝构造函数

在某些条件下,我希望SFINAE去掉类模板的复制构造函数和复制赋值运算符。但是如果我这样做,就会生成一个默认的复制构造函数和一个默认的赋值运算符。SFINAE是基于我作为类模板参数传递的标签完成的。问题是,SFINAE仅适用于模板,而复制构造函数/赋值运算符不能是模板。是否有解决方法? 最佳答案 此解决方案使用有条件不可复制的基类(通过将复制构造函数和复制赋值运算符显式标记为已删除)。templatestructNoCopy;templatestructNoCopy{//C++11andlater:markingasdeleted.

c++ - 'Guaranteed Copy Elision' (P0135, C++1z) 是否可能需要 ABI 损坏?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html2016年6月在芬兰奥卢举行的session上,上述关于“保证复制省略”的提案被投票纳入C++工作文件,然后被投票作为委员会草案发布。希望这会导致明年作为C++17标准发布。该提案阐明了涉及临时对象的各种值类别,以强制在某些用例中不调用复制构造函数。我的问题是“这个新要求可能会破坏以前在这些情况下可能没有进行复制省略的编译器的ABI兼容性,或者以与新要求不兼容的方式实现它?"我正在考虑诸如初始化之类的事情,当对象的创建可以内联时会省略拷贝,但在跨越编译