关于构造函数的问题
- C/C++ code
#include<iostream>using namespace std;class a{ int i;public: a(int n){i=n;cout<<"构造"<<endl;} a(a& aa) {i=aa.i; cout<<"复制"<<endl;} a f(){ cout<<"fffffff"<<endl; return a(666); } ~a(){ cout<<"析构"<<endl;}};int main(){ a a1=9; a a2(a1.f());//为什么这里的a1.f()没有产生构造和析构行为,最终a2(a1.f())也没有调用复制构造函数 cout<<"============================"<<endl; a1.f(); //这里就有构造和析构 cout<<"==========================="<<endl; return 0;}
编译器是vs2010
[解决办法]
首先,lz的代码我在centos 5.3 64bit环境下编译不过,gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-44)。错误大概是拷贝构造函数定义不正确,于是改造如下:
- C/C++ code
#include <iostream>using namespace std;class A{ int i;public: A(int n) { i=n; cout<<"构造 "<<hex<<this<<endl; } A(const A &aa) { i=aa.i; cout<<"复制 "<<hex<<this<<endl; } A f() { cout<<"fffffff"<<endl; return A(6); } ~A() { cout<<"析构"<<endl; }};int main(){ A a1(9); cout<<"==================="<<endl; A a2(a1.f());//为什么这里的a1.f()没有产生构造和析构行为,最终a2(a1.f())也没有调用复制构造函数 cout<<"============================"<<endl; a1.f(); //这里就有构造和析构 cout<<"==========================="<<endl; return 0