【问题标题】: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 将原始存储初始化为对象。不管存储是如何产生的。

标签: c++ class c++17 new-operator


【解决方案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 当然这是本意,谢谢。我似乎还没有完全清醒... :-(
猜你喜欢
  • 2011-11-01
  • 2013-11-28
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多