首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除默认构造函数?

如何删除默认构造函数?
EN

Stack Overflow用户
提问于 2012-05-07 05:21:28
回答 4查看 47.3K关注 0票数 49

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

代码语言:javascript
运行
复制
class MyClass 
{ 
  public: 
    MyClass() = delete; 
};

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-07 05:22:46

我要说的是让它成为私人的..就像这样

代码语言:javascript
运行
复制
class MyClass
{
private:
    MyClass();
}

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

票数 50
EN

Stack Overflow用户

发布于 2012-05-07 05:23:02

好的。定义你自己的构造函数,不管是默认的还是其他的。

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

票数 14
EN

Stack Overflow用户

发布于 2019-12-31 02:59:00

由于c++11,你可以设置构造器= delete。这在与c++11的花括号初始化语法{}结合使用时非常有用。

例如:

代码语言:javascript
运行
复制
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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10474417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档