以下方法确实有效,但非常乏味:
T(const T&) = delete;
T(T&&) = delete;
T& operator=(const T&) = delete;
T& operator=(T&&) = delete;
我正在尝试发现最简洁的方法。以下是否可行?
T& operator=(T) = delete;
更新
请注意,我选择 T& operator=(T)
而不是 T& operator=(const T&)
或 T& operator=(T&&)
,因为它可以同时满足这两个目的。
最佳答案
根据这张图表(由 Howard Hinnant 提供):
最简洁的方式是=delete
move 赋值运算符(或者 move 构造函数,但是会导致注释中提到的问题)。
不过,在我看来,最可读的方法是=delete
both复制构造函数和复制赋值操作符。
关于c++ - 禁用复制和 move 语义的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48864976/