考虑到cppreference和当前的c ++工作草案,如果符合以下条件,则可以轻松复制一个类:
- 每个拷贝构造函数都很简单或被删除
- 每个移动构造函数都是微不足道的或删除的
- 每个复制赋值运算符都很简单或被删除
- 每个移动赋值运算符都很简单或被删除
- 至少一个复制构造函数,移动构造函数,复制赋值运算符或移动赋值运算符未被删除
琐碎的非删除析构函数
所以我想出了这个代码示例:
#include <type_traits>
struct non_trivially_copyable {
non_trivially_copyable(non_trivially_copyable const&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable const&) = delete;
non_trivially_copyable(non_trivially_copyable &&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable &&) = delete;
};
int main()
{
return std::is_trivially_copyable<non_trivially_copyable>::value;
}
我的班级不满足要求编号5.它仍然给了我班级的结果 non_trivially_copyable
很容易复制。我在一些在线编译器上测试了它:
- https://godbolt.org/g/9s4fr9
- https://wandbox.org/permlink/sEJYdi5aIDMzsjGY
- https://onlinegdb.com/SyFyTBrx7
- http://coliru.stacked-crooked.com/a/93b6ea4d202092a6
我怀疑所有的实现都是错误的;那为什么我得到这个结果?