有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在 C++ 11 中,我可以执行以下操作:
class MyClass
{
public:
MyClass() = delete;
};
但是目前我的讲师不允许我在作业中这样做。问题是:在 C++ 11 之前,有没有办法告诉编译器停止隐式提供默认构造函数?
原文由 Max 发布,翻译遵循 CC BY-SA 4.0 许可协议
有时我不想提供默认构造函数,也不希望编译器为我的类提供系统默认构造函数。在 C++ 11 中,我可以执行以下操作:
class MyClass
{
public:
MyClass() = delete;
};
但是目前我的讲师不允许我在作业中这样做。问题是:在 C++ 11 之前,有没有办法告诉编译器停止隐式提供默认构造函数?
原文由 Max 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 c++11 开始,您可以设置构造函数 = delete
。这与 c++11 的大括号初始化语法 {}
结合使用很有用。
例如:
struct foo {
int a;
foo() = delete;
foo(int _a) {
// working constructor w/ argument
}
};
foo f{}; // error use of deleted function foo::foo()
foo f{3}; // OK
原文由 fafrd 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
1 回答3.3k 阅读
我会说让它私有..像
并且没有人(来自类本身或朋友类之外)将能够调用默认构造函数。此外,您将拥有三个使用该类的选项:提供参数化构造函数或将其用作实用程序类(仅具有静态函数的类)或在友元类中为该类型创建工厂。