c++中的匿名对象
C++有匿名对象,只在当行代码有用,离开当行代码立即析构!!!
什么是匿名对象?
匿名对象可以理解为是一个临时对象,一般系统自动生成的,如你的函数返回一个对象,这个对象在返回时会生成一个临时对象。
匿名对象的生命周期(很重要!!!)
例一:
class A { public: A(int s) { i = s; } void myshow() { cout<<i<<endl; } private: int i; }; void playstage() { cout<<A(10).myshow()<<endl;//调用匿名对象 A a = 11;//此处发生隐身转换。。。。相当于 A a = A(11); 此处的A(11)就是一个匿名对象 A b = A(12);//当匿名对象有等待初始化的对象接的时候,只调用一次构造和析构函数 A c;//调用一次构造函数 c = A(13);//此处为赋值。。。。。此处的匿名对象会调用一次构造函数 } void main() { playstage(); system("pause"); }
输出:
例二:
class Cat { public: Cat() { cout<<"Cat类 无参构造函数"<<endl; } Cat(Cat& obj) { cout<<"Cat类 拷贝构造函数"<<endl; } ~Cat() { cout<<"Cat类 析构函数 "<<endl; } }; void playStage() //一个舞台,展示对象的生命周期 { Cat(); /*在执行此代码时,利用无参构造函数生成了一个匿名Cat类对象;执行完此行代码, 因为外部没有接此匿名对象的变量,此匿名又被析构了*/ Cat cc = Cat(); /*在执行此代码时,利用无参构造函数生成了一个匿名Cat类对象;然后将此匿名变 成了cc这个实例对象*/ } int main() { playStage(); system("pause"); return 0; }
输出:
Cat类 无参构造函数 Cat类 析构函数 Cat类 无参构造函数 Cat类 析构函数
说明:
1、在执行playStage( )函数中的Cat( )时,生成了一个匿名对象,执行完Cat( )代码后,此匿名对象就此消失。这就是匿名对象的生命周期。
2、在执行playStage( )函数中Cat cc = Cat();时,首先生成了一个匿名对象,因为外部有cc对象在等待被实例化,然后将此匿名对象变为了cc对象,其生命周期就变成了cc对象的生命周期。
总结:
如果生成的匿名对象在外部有对象等待被其实例化,此匿名对象的生命周期就变成了外部对象的生命周期;如果生成的匿名对象在外面没有对象等待被其实例化,此匿名对象将会生成之后,立马被析构。

浙公网安备 33010602011771号