c++ - 有没有办法禁用非动态类构造函数?
问题描述
想象一个只能用new
操作符构造的类。是否可以在不删除其析构函数的情况下在 c++17 标准中实现这一点?
class Foo
{
Foo(){}
~Foo(){}
// delete non-dynamic constructor...?
}
// ...
Foo A; // compiling error
Foo* B = new Foo(); // ok
解决方案
您可以通过将所有构造函数保持私有并将强制调用包装new
在工厂函数中来轻松做到这一点。
您还应该禁用复制课程。
class Foo
{
private:
Foo() {}
Foo(const Foo&) = delete;
Foo& operator= (const Foo&) = delete;
public:
~Foo() {}
static std::unique_ptr<Foo> create() { return std::unique_ptr<Foo>(new Foo{}); }
};
推荐阅读
- azure - Microsoft.Web/sites/hostNameBindings 的 ARM 模板部署不断给我冲突错误
- ignite - Apache Ignite ArrayList 通过 RDBMS 写入
- python - Kivy,当内容改变大小时,ScrollView 会自动滚动
- ssl - 在 IOT 设备上更新 SHA-1 指纹的方法
- html - css flex box 将文本中心与其下方的按钮对齐
- laravel - 有没有办法从另一台电脑访问我的本地项目
- ruby - 为什么 gem list 显示 gem 已安装,但 gem 在尝试执行时未“找不到”(捆绑程序)
- python - PyAudio 错误:[Errno -9986] 无法获取流信息
- html - 如何呈现存储为字符串的 html 代码?
- pandas - 以相同的指定顺序制作 pandas.plot 图例和堆栈