【转】 C++中如何在一个构造函数中调用另一个构造函数
2014-08-25 13:03
281 查看
在C++中,一个类的构造函数没法直接调用另一个构造函数,比如:
这里第11行的调用A(0);只是构建了一个A的临时对象,并没有调用A(int x)来初始化自己。其运行结果是:
可以看到尽管调用了A(0),m_x仍然没有改变,是4268020.
正确的方法是使用placement new:
第11行应为: new(this) A(0); 也就是用当前对象来调用构造函数A(int x)构建一个“新”对象。其运行结果是:
可以看出,当前对象确实被改变了。
#ifndef _A_H_ #define _A_H_ #include <stdio.h> #include <new> class A { public: A() { printf("In A::(). m_x=%d\n", m_x); A(0); printf("Out A::(). m_x=%d\n", m_x); } A(int x) { printf("In A::(int x). x=%d\n", x); m_x=x; } private: int m_x; };
这里第11行的调用A(0);只是构建了一个A的临时对象,并没有调用A(int x)来初始化自己。其运行结果是:
[root@tivu25 utcov]# ./UTest.out In A::(). m_x=4268020 In A::(int x). x=0 Out A::(). m_x=4268020
可以看到尽管调用了A(0),m_x仍然没有改变,是4268020.
正确的方法是使用placement new:
//A.h #ifndef _A_H_ #define _A_H_ #include <stdio.h> #include <new> class A { public: A() { printf("In A::(). m_x=%d\n", m_x); new(this) A(0); printf("Out A::(). m_x=%d\n", m_x); } A(int x) { printf("In A::(int x). x=%d\n", x); m_x=x; } private: int m_x; }; #endif
第11行应为: new(this) A(0); 也就是用当前对象来调用构造函数A(int x)构建一个“新”对象。其运行结果是:
[root@tivu25 utcov]# ./UTest.out In A::(). m_x=4268020 In A::(int x). x=0 Out A::(). m_x=0
可以看出,当前对象确实被改变了。
相关文章推荐
- C++中如何在一个构造函数中调用另一个构造函数
- C++中如何在一个构造函数中调用另一个构造函数
- c++ 一个构造函数 调用 另一个 构造函数
- c++如何一个文件如何调用在同一个工程下的另一个文件的函数
- c++ 一个构造函数 调用 另一个 构造函数
- C++学习笔记-----在一个构造函数中调用另一个构造函数
- 如何在一个窗体中调用另一个窗体的控件或方法
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- C++中可以在构造函数中调用另一个构造函数吗?
- 如何在一个窗体中调用另一个窗体的控件或方法
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- 一个类的对象作为另一个类的数据成员时如何构造函数
- iOS 如何在一个应用程序中调用另一个应用程序
- 如何在一个窗体中调用另一个窗体的控件或方法
- (转载)网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- 在一个网站的asp文件下,重定向另一个网站的jsp网页,如何实现在本网站中隐藏调用网站的域名?
- 如何实现一个frame中的按钮事件调用另一个frame的服务器控件
- 系统提示一个程序正在被另一个程序调用,如何知道是被哪个程序调用
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- 在c++中如何用new生成一个构造函数带参数的类数组(转载整理)