C++ 如何删除默认构造函数?
有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在C++ 11中,我可以做如下的事情:< /P>C++ 如何删除默认构造函数?,c++,C++,有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在C++ 11中,我可以做如下的事情:< /P> class MyClass { public: MyClass() = delete; }; 但目前我的讲师不允许我在作业中这样做。问题是:在C++ 11之前,有没有方法告诉编译器停止隐式提供默认构造函数?< /P> < P>我会说是私有的。差不多 class MyClass { private: MyClass(); } 并且没有人(来自类本
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++写,也可以不用定义就离开你的私人构造函数。它将帮助您保护默认构造函数不被友元类调用(将抛出链接错误)。