有没有办法禁用非动态类构造函数? [复制]
Posted
技术标签:
【中文标题】有没有办法禁用非动态类构造函数? [复制]【英文标题】:Is there a way to disable a non-dynamic class constructor? [duplicate] 【发布时间】:2018-05-22 07:33:33 【问题描述】:想象一个只能用new
运算符构造的类。是否可以在不删除其析构函数的情况下在 c++17 标准中实现这一点?
class Foo
Foo()
~Foo()
// delete non-dynamic constructor...?
// ...
Foo A; // compiling error
Foo* B = new Foo(); // ok
【问题讨论】:
Afaik 不,为什么要一个? 没有“动态”与“非动态”c'tor。 C'tors 将原始存储初始化为对象。不管存储是如何产生的。 【参考方案1】:您可以通过将所有构造函数保持私有并将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);
;
【讨论】:
至少将create
设为静态,否则将无法使用。
@hellow 当然这是本意,谢谢。我似乎还没有完全清醒... :-(以上是关于有没有办法禁用非动态类构造函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我定义了一个非拷贝构造函数;复制构造函数是不是仍会被隐式定义?