繁体   English   中英

如何删除默认构造函数?

[英]How to delete the default constructor?

有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。 在 C++ 11 中,我可以做这样的事情:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};

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

我会说把它设为私有.. 类似

class MyClass
{
private:
    MyClass();
}

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

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

您也可以将其声明为私有,以便无法调用。 不幸的是,这会使您的类完全无法使用,除非您提供一个静态函数来调用它。

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

例如:

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

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

https://en.cppreference.com/w/cpp/language/default_constructor#Deleted_implicitly-declared_default_constructor

除了将默认构造函数声明为私有之外,您还可以在有人尝试调用它时抛出异常。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM