之前我问过为什么这被认为是不好的:
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/