在设计一个可以移动但不能复制的类时,很自然地将复制构造函数声明为私有。当只有可移动且可简单复制的对象作为实例成员时,允许编译器隐式生成移动构造函数是有意义的。
但是,当同时支持 VS11 和 G++4.7 时,我发现不兼容:
- VS11 需要明确定义的移动构造函数
- G++ 要求显式移动构造函数具有匹配的公共复制构造函数或 noexcept 关键字。
- VS11 不支持 noexcept 关键字。
正如你所看到的,这让我有点不知所措。我的课绝不能抄袭。我必须同时支持VS11 和 MinGW / GCC。我需要我的班级是可移动的。
我是否误解了什么,或者有没有办法解决这个小问题?如果生成了对复制构造函数的调用,我可以使编译失败吗?这个问题有更好的解决方案吗?