有没有办法禁用非动态 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{}); }
};