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/
时间: 2024-11-05 16:32:48