想象一个只能用new
运算符构造的类。是否有可能在c ++ 17标准中实现这一点而不删除它的析构函数?
class Foo
{
Foo(){}
~Foo(){}
// delete non-dynamic constructor...?
}
// ...
Foo A; // compiling error
Foo* B = new Foo(); // ok
答案 0 :(得分:3)
您可以通过将所有构造函数保密并将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{}); }
};