理解零规则
Understanding rule of zero
本文关键字:规则 更新时间:2023-10-16
我有一个基类,我不想让派生类可复制。为了使一切都显式,我这样实现它:
class A {
public:
A() = default;
virtual ~A() = default;
A(const A&) = delete;
A(const A&&) = delete;
A& operator=(const A&) = delete;
A& operator=(const A&&) = delete;
virtual void vFun() = 0;
};
class B : public A {
public:
B() = default;
virtual ~B() = default;
B(const B&) = delete;
B(const B&&) = delete;
B& operator=(const B&) = delete;
B& operator=(const B&&) = delete;
virtual void vFun() override {}
};
这样做正确吗?根据我的知识和我所读的东西,答案是肯定的,但我想在把它引入生产系统之前确定一下。
编辑
总结一下:1)几乎总是移动的操作符不应该被删除。这是因为"有无限多的东西需要可移动性"。2)对于抽象基类,允许编译器生成特殊的成员函数是更安全的,如果有必要的话,将删除移到派生类中。
不,这是完全错误的。
首先,为了使派生类不可复制,您将其设置为不可可移动,这使得它几乎毫无用处。
其次,A没有理由是不可复制的。每个派生类只要愿意就可以使自己不可复制。A已经是抽象的,不能切片,所以没有理由让A不可复制。
相关文章:
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 尽管遵循了规则,内存泄漏在哪里
- 这是关于成员访问规则的正确摘要吗
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 增强精神解析器规则以检测语句中的特殊结尾
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 为什么此指针值不能转换为整数的规则是什么?
- 传递通用函数,用于梯形规则的数值积分
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 模板如何影响C++中隐式声明的规则?
- antlr 规则上下文是否可以独立于目标
- Bison/flex 在识别规则后等待输入
- 生成文件中隐式规则中的 -c 标志出错
- 单链接列表实现,规则为 3
- 指针算术规则中的"possibly-hypothetical"是什么意思?
- 假设声明中某些上下文中需要的名称查找规则是什么
- C++ 用于检查容器类中是否存在函数和隐式推导规则的概念