【问题标题】:Making sure copy constructor is never called when move constructor exists确保存在移动构造函数时永远不会调用复制构造函数
【发布时间】:2012-10-10 01:01:04
【问题描述】:

在设计一个可以移动但不能复制的类时,很自然地会将复制构造函数声明为私有。当只有可移动和可简单复制的对象作为实例成员时,允许编译器隐式生成移动构造函数是有意义的。

但是,当同时支持 VS11 和 G++4.7 时,我发现不兼容:

  • VS11 需要明确定义的移动构造函数
  • G++ 要求显式移动构造函数具有匹配的公共复制构造函数或 noexcept 关键字
  • VS11 不支持 noexcept 关键字。

如您所见,这让我有点吃不消。我的班级不得被复制。我必须支持 VS11 和 MinGW / GCC。我需要我的班级可以移动。

是我误解了什么,还是有办法解决这个小问题?如果生成了对复制构造函数的调用,我可以使编译失败吗?有什么更好的办法解决这个问题?

【问题讨论】:

    标签: c++ c++11 copy-constructor move-semantics


    【解决方案1】:

    如果你把它添加到源文件中

    #ifdef _MSC_VER
    #define noexcept
    #endif
    

    您可以在 GCC 上将其定义为 noexcept,但 VC++ 将忽略 noexcept

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2022-11-21
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多