【发布时间】:2009-01-19 14:22:52
【问题描述】:
之前我问过为什么这被认为是不好的:
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);
}
现在,我知道它正在创建一个函数原型,而不是返回一个类型 Example。我仍然不明白为什么它会在 g++ 和 MS VC++ 中工作。
我的下一个问题是使用上述方法,这个调用是否有效?
int main(void)
{
Example *e = new Example();
return(0);
}
?那和简单地调用 Example e() 有什么区别???就像我知道它是一个函数原型一样,但似乎有些编译器会原谅它并允许它调用默认构造函数?我也试过这个:
class Example
{
private:
Example();
public:
~Example();
};
int main(void)
{
Example e1(); // this works
Example *e1 = new Example(); // this doesn't
return(0);
}
所以我有点困惑:(对不起,如果这被问了一百万次。
【问题讨论】:
-
这与在堆栈中分配内存有关,而不是与默认构造函数有关
标签: c++ constructor class default