C++ 如何删除默认构造函数?

C++ 如何删除默认构造函数?,c++,C++,有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在C++ 11中,我可以做如下的事情:< /P> class MyClass { public: MyClass() = delete; }; 但目前我的讲师不允许我在作业中这样做。问题是:在C++ 11之前,有没有方法告诉编译器停止隐式提供默认构造函数?< /P> < P>我会说是私有的。差不多 class MyClass { private: MyClass(); } 并且没有人(来自类本

有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在C++ 11中,我可以做如下的事情:< /P>
class MyClass 
{ 
  public: 
    MyClass() = delete; 
};

但目前我的讲师不允许我在作业中这样做。问题是:在C++ 11之前,有没有方法告诉编译器停止隐式提供默认构造函数?< /P> < P>我会说是私有的。差不多

class MyClass
{
private:
    MyClass();
}

并且没有人(来自类本身或朋友类之外)能够调用默认构造函数。此外,使用该类还有三个选项:要么提供参数化构造函数,要么将其用作实用程序类(仅具有静态函数),要么在friend类中为此类型创建工厂。

当然。定义自己的构造函数,默认或其他


你也可以将它声明为私有,这样就不可能打电话了。不幸的是,这会使类完全不可用,除非您提供一个静态函数来调用它。

除声明默认构造函数私有外,当有人试图调用它时,您还可能引发异常

class MyClass
{
  private:
    MyClass() 
    {
      throw [some exception];
    };
}

从c++11开始,您可以设置构造函数
=delete
。这与c++11的大括号初始化语法
{}
结合使用非常有用

例如:

struct foo {
  int a;
  foo() = delete;
};

foo f{}; // error use of deleted function foo::foo()
foo f{3}; // OK

Scott Meyers在他的书中,有效的现代C++写,也可以不用定义就离开你的私人构造函数。它将帮助您保护默认构造函数不被友元类调用(将抛出链接错误)。