码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-21 17:38:19      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   java   strong   sp   div   

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/

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

标签:style   blog   http   color   ar   java   strong   sp   div   

原文地址:http://www.cnblogs.com/findumars/p/4040795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!