C++ 类默认构造函数

标签 c++ constructor class default

之前我问过为什么这被认为是不好的:

class Example
{
 public: 
  Example(void);
  ~Example(void);
  void f() {}
}

int main(void)
{
 Example ex(); // <<<<<< what is it called to call it like this?

 return(0);
}

现在,我了解到它正在创建一个函数原型(prototype),而不是返回一个类型 Example。我仍然不明白为什么它会在 g++ 和 MS VC++ 中工作。

我的下一个问题是使用上面的方法,这个调用是否有效?

int main(void)
{
 Example *e = new Example();

 return(0);
}

?这和简单地调用 Example e() 有什么区别???就像我知道它是一个函数原型(prototype),但似乎有些编译器会原谅它并允许它调用默认构造函数?我也试过这个:

class Example
{
 private:
  Example();

 public:
  ~Example();
};

int main(void)
{
 Example e1(); // this works
 Example *e1 = new Example(); // this doesn't

 return(0);
}

所以我有点困惑 :( 如果这个问题被问了一百万次,我很抱歉。

最佳答案

这很简单,丹尼尔:

Example *e = new Example();

这看起来不像是一个名为“Example”的函数,对吧?函数有返回值、名称和参数。以上如何适合呢?

Example e1(); // this works

是的,因为您没有在任何地方创建 Example 的任何实例。您只需告诉代码在某处周围的命名空间中定义了一个函数,并且您可能想要调用该函数。是的,为了返回 Example 的对象,确实会创建一个实例。但这并不意味着此时会创建一个实例。相反,当您调用它时,会在函数中创建一个实例。

关于C++ 类默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457719/

相关文章:

c++ - 为什么这个带有可变模板参数的构造函数不匹配?

c++ - 如何使用指针函数写入/读取数组

c++ - 我的代码中大量包含 .h 文件

c++ - 为什么我的 std::vector.push_back 抛出 bad_alloc 异常

c++ - 无效使用功能错误

使用 id 和类的 CSS 样式链接

c++ - 使用模板时初始化数组

c++ - 在结构的构造函数中使用类方法分配变量

c++ - 没有合适的默认构造函数可用

c++ - 是否多次调用多个继承的构造函数?