我想创建一个既不可复制又不可移动的基类。
class noncopyable {
protected:
noncopyable() = default;
~noncopyable() = default;
noncopyable(noncopyable const &) = delete;
noncopyable &operator=(noncopyable const &) = delete;
};
class nonmovable {
protected:
nonmovable() = default;
~nonmovable() = default;
nonmovable(nonmovable &&) = delete;
nonmovable &operator=(nonmovable &&) = delete;
};
是否存在类应该既不可复制又不可移动的情况?
class non : public noncopyable, public nonmovable {
};
class foo : public non {
};
如果有,这里“非”类的方便名称应该是什么?
最佳答案
有人争论过,例如here , 所展示的 nonmoveable
首先是一个坏主意。
有四种合理的选择:
- 类型自然是可复制和可移动的。
- 类型不可复制,但可移动。
如果它正在管理资源,并且复制资源是不可能的,或者太昂贵以至于不受欢迎,这种情况经常发生。 - 类型没有特殊的可移动性——移动构造函数只是调用复制构造函数。
如果出于技术原因,您不想为这种类型的对象创建“空状态”,或者没有便宜/自然的方式让移出的对象处于任何可接受的状态,那么这通常会发生。 - 类型既不可复制也不可移动。
这可能发生在静态单例或类似的东西上,移动或复制它是你的程序中永远不应该发生的事情,你希望防止发生编译时错误。
如果类型是可复制的,但移动它失败了,这绝对是一个糟糕的安排,而应该移动以回退到复制。当拷贝没问题时让移动失败没有任何好处,它只会抑制通用编程。
所以也许你应该只有“noncopyable”和“non”,而不是“nonmoveable”?
关于c++ - 不可复制和不可移动一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743586/