有没有办法禁用非动态 class 构造函数?
Is there a way to disable a non-dynamic class constructor?
想象一个只能用 new
运算符构造的 class。是否可以在不删除其析构函数的情况下在c++17标准中实现这一点?
class Foo
{
Foo(){}
~Foo(){}
// delete non-dynamic constructor...?
}
// ...
Foo A; // compiling error
Foo* B = new Foo(); // ok
您可以通过将所有构造函数保持私有并将 new
的强制调用包装在工厂函数中来轻松地做到这一点。
您还应该禁用复制 class。
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{}); }
};
想象一个只能用 new
运算符构造的 class。是否可以在不删除其析构函数的情况下在c++17标准中实现这一点?
class Foo
{
Foo(){}
~Foo(){}
// delete non-dynamic constructor...?
}
// ...
Foo A; // compiling error
Foo* B = new Foo(); // ok
您可以通过将所有构造函数保持私有并将 new
的强制调用包装在工厂函数中来轻松地做到这一点。
您还应该禁用复制 class。
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{}); }
};