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


    Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有。看一下这段代码:

    class A {
    public:
        A() { printf("A() 
    "); }
        A(int d) { printf("A(int) 
    "); A(); }  // 不能这样调用构造函数!会生成另一个匿名对象
        ~A() { printf(" ~A 
    "); } 
        void ddd() { printf(" ddd 
    "); } 
    };
    
    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) "); }
    输出结果是:
    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/

  • 相关阅读:
    Servlet开发【03】Servlet与表单|路径匹配详解
    Javascript学习的网址
    Eclipse开发Web工程步骤
    jdk环境变量配置
    Eclipse中打开html或xml卡死
    如何Eclipse中配置和使用SVN?
    Ajax
    Django 基础
    linux
    Django之ORM
  • 原文地址:https://www.cnblogs.com/findumars/p/4040795.html
Copyright © 2020-2023  润新知