c++ - 为无复制/无移动类型扩展的最小类是什么?
问题描述
假设我想创建一些类来管理不应复制或移动的资源,这将是扩展和避免错误的最小类?
这个想法是,通过扩展类,我在0/3/5 规则的安全方面结束。
我有这个想法,这显然有效。
class NOCOPYNOMOVE {
NOCOPYNOMOVE(NOCOPYNOMOVE &v) = delete;
NOCOPYNOMOVE(NOCOPYNOMOVE &&v) = delete;
NOCOPYNOMOVE& operator=(NOCOPYNOMOVE &r) = delete;
NOCOPYNOMOVE& operator=(NOCOPYNOMOVE &&r) = delete;
};
class Foo: private NOCOPYNOMOVE {
public:
Foo() {}
~Foo() {}
};
解决方案
- 不需要删除移动构造函数,见https://stackoverflow.com/a/38820178/2945027
- 避免
ALL_CAPS
使用名称,因为它通常是用于宏的每个约定 - 没有理由
const
在复制构造函数/赋值中省略,所以应该首选通常的形式 - 如果类会从某个命名空间中的某些类继承
NOCOPYNOMOVE
,则可能会触发意外的 ADL。boost::noncopyable
通过将定义放在noncopyable_
命名空间中来解决它,请参阅实现 - 我宁愿没有一些基础,而是在目标类中拼出这两三行:
class Foo {
public:
Foo() {}
~Foo() {}
Foo(const Foo&) = delete;
Foo& operator=(const Foo&) = delete;
};
推荐阅读
- python - 除了 numpy 数组,Python 从 long 转换
- excel - VBA Excel:从特定单元格中搜索某行的某个变量值然后将值复制并粘贴到该列的宏
- database - 在数组中查找 ObjectId
- angular - 如何使用 Angular 2+ 中的指令获取图像 src 值?
- cordova - Cordova/JQuery 移动应用程序在构建后无法正确显示页面
- oracle - 通过 dblink (Oracle <> Postgres) 查询 JSONB
- javascript - url上的回调函数?
- r - KNN 可视化 - 如何围绕使用 R 连接到 N 个最近点的数据点绘制一个圆圈
- reactjs - Reactjs 随机颜色选择器 - 哇一定有更简单的方法吗?
- sql - oracle sql - 如何从某些范围内获取具有最大值的记录