读书人

关于构造函数的有关问题

发布时间: 2012-07-29 15:26:14 作者: rapoo

关于构造函数的问题

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 

读书人网 >C++

热点推荐