强化训练2--匿名对象的生命周期

来源:互联网 发布:一楼土木人淘宝坑人 编辑:程序博客网 时间:2024/05/16 23:49

//临时对象和匿名对象没有人去接它,编译器马上就析构了

#include<iostream>using namespace std;class ABCD{public:ABCD(int a,int b,int c){this->a = a;this->b = b;this->c = c;printf("ABCD() construct,a:%d,b:%d,c:%d \n",this->a,this->b,this->c);}~ABCD(){printf("~ABCD() construct,a:%d,b:%d,c:%d \n",this->a,this->b,this->c);}int getA(){return this->a;}protected:private:int a;int b;int c;};class MyE{public:MyE():abcd1(1,2,3),abcd2(4,5,6),m(100){cout << "MyD()"<<endl;}~MyE(){cout << "~MyD()"<<endl;}MyE(const MyE &obj):abcd1(7,8,9),abcd2(10,11,12),m(100){printf("MyD(const MyD & obj)\n");}protected:private:ABCD abcd1;//c++编译器不知道如何构造abcd1;先执行这个函数的构造函数ABCD abcd2;const int m;};int doThing(MyE mye1){//printf("doThing() mye1,abcd1,a:%d \n",mye1.abcd1.getA());//有问题一直通过不了printf("doThing() mye1,abcd1,a:%d \n");return 0;}int run3(){printf("run3 star..\n");ABCD(400,500,600);//临时对象的生命周期,直接调用ABCD类的构造函数//临时对象和匿名对象没有人去接它,编译器马上就析构了printf("run3 end..\n");return 0;}int main(){run3();system("pause");return 0;}




匿名对象转正

#include<iostream>using namespace std;class ABCD{public:ABCD(int a,int b,int c){this->a = a;this->b = b;this->c = c;printf("ABCD() construct,a:%d,b:%d,c:%d \n",this->a,this->b,this->c);}~ABCD(){printf("~ABCD() construct,a:%d,b:%d,c:%d \n",this->a,this->b,this->c);}int getA(){return this->a;}protected:private:int a;int b;int c;};class MyE{public:MyE():abcd1(1,2,3),abcd2(4,5,6),m(100){cout << "MyD()"<<endl;}~MyE(){cout << "~MyD()"<<endl;}MyE(const MyE &obj):abcd1(7,8,9),abcd2(10,11,12),m(100){printf("MyD(const MyD & obj)\n");}protected:private:ABCD abcd1;//c++编译器不知道如何构造abcd1;先执行这个函数的构造函数ABCD abcd2;const int m;};int doThing(MyE mye1){//printf("doThing() mye1,abcd1,a:%d \n",mye1.abcd1.getA());//有问题一直通过不了printf("doThing() mye1,abcd1,a:%d \n");return 0;}/*int run3(){printf("run3 star..\n");//这个时候没有创建一个对象ABCD(400,500,600);//临时对象的生命周期,直接调用ABCD类的构造函数//临时对象和匿名对象没有人去接它,编译器马上就析构了printf("run3 end..\n");return 0;}*/int run3(){printf("run3 star..\n");//这个时候创建一个对象ABCD abcd=ABCD(400,500,600);//有对象去接了printf("run3 end..\n");return 0;}int main(){run3();system("pause");return 0;}


0 0
原创粉丝点击