有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数.在C++ 11中,我可以这样做:
class MyClass
{
public:
MyClass() = delete;
};
Run Code Online (Sandbox Code Playgroud)
但目前我的讲师不允许我在我的任务中这样做.问题是:在C++ 11之前,有没有办法告诉编译器隐式提供默认构造函数?
vid*_*dit 47
我会说把它私有化......就像
class MyClass
{
private:
MyClass();
}
Run Code Online (Sandbox Code Playgroud)
并且没有人(来自类本身或朋友类之外)将能够调用默认构造函数.此外,您将有三个使用该类的选项:要么提供参数化构造函数,要么将其用作实用程序类(仅具有静态函数)或在友元类中为此类型创建工厂.
Edw*_*nge 13
当然.定义您自己的构造函数,默认或其他.
您也可以将其声明为私有,以便无法调用.遗憾的是,除非您提供静态函数来调用它,否则会使您的类完全无法使用.
faf*_*frd 10
从 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31897 次 |
| 最近记录: |