C++不能显式调用构造函数,会生成匿名对象,这点与Java完全不一样!

Java有super(),但是C++里面没有。看一下这段代码:

class A {
public:
    A() { printf("A() \n"); }
    A(int d) { printf("A(int) \n"); A(); }  // 不能这样调用构造函数!会生成另一个匿名对象
    ~A() { printf(" ~A \n"); } 
    void ddd() { printf(" ddd \n"); } 
};

int main(int argc, char* argv[])
{
    A aaa(9);
    aaa.ddd();

    getchar();
    return 0;
}


输出结果是:
A(int)
A()
~A
ddd

但是如果改成
A(int d) { printf("A(int) \n"); }
输出结果是:
A(int)
ddd

充分证明这中间有生成和销毁过一个匿名对象!并且我目前不知道有没有官方解决方案,如果要定义init()函数,那还是算了吧。

参考:
http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html

一些讨论:

http://bbs.csdn.net/topics/80415554

---------------------------------------------------------------------

但是可以显式调用析构函数,参考:

http://fpcfjf.blog.163.com/blog/static/55469793201362442256498/

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。