C++不能显式调用构造函数,会生成匿名对象,这点与Java完全不一样!
2014-10-21 16:58
537 查看
Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有。看一下这段代码:
输出结果是:
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/
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++ 对象模型》有感之构造函数和析构函数不能调用虚函数
- C++中显式和隐式调用(直接返回结构体如何生成对象)
- c++中构造函数调用另一构造函数的问题,如何避免生成临时对象
- Java中调用C/C++生成的DLL
- C++面向对象复习(三)——构造函数与析构函数的调用顺序
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- 多重继承、虚基类继承时,没有显式调用基类构造函数,对象是如何初始化的问题
- Java中调用C/C++生成的DLL
- Java中调用C/C++生成的DLL
- JAVA中调用C/C++生成的DLL
- java使用JNI调用C++代码(vs2010生成dll文件)
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- 怎么根据linux c/c++ 开发的d-bus服务生成java 的调用接口文件
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- C++中构造函数和析构函数显式调用的方法
- JAVA中调用C/C++生成的DLL
- C++中构造函数和析构函数显式调用的方法
- 自动调用类的构造函数生成临时类对象
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- JAVA基础第五天学习日记_面向对象开发思想、匿名对象、封装、私有、构造函数