时间:2021-05-19
C++中临时对象(Temporary Object)又称无名对象。临时对象主要出现在如下场景。
1.建立一个没有命名的非堆(non-heap)对象,也就是无名对象时,会产生临时对象。
Integer inte= Integer(5); //用无名临时对象初始化一个对象2.构造函数作为隐式类型转换函数时,会创建临时对象,用作实参传递给函数。
例:
class Integer{public: Integer(int i):m_val(i){} ~Integer(){}private: int m_val;};void testFunc(Integer itgr){ // do something}那么语句:
int i = 10; testFunc(i);会产生一个临时对象,作为实参传递到testFunc函数中。
3.函数返回一个对象时,会产生临时对象。以返回的对象最作为拷贝构造函数的实参构造一个临时对象。
Integer Func(){ Integer itgr; return itgr;}void main(){ Integer in; in = Func();}如下代码验证以上结论:
class Integer{public:Integer(){ cout<<"Integer default Constructor"<<endl;};Integer(const Integer& arg){ this->m_val=arg.m_val; cout<<"Integer Copy Constructor"<<endl;}; Integer(int i):m_val(i){cout<<"Integer Constructor"<<endl;};Integer& operator=(const Integer& arg){ cout<<"Assignment operator function"<<endl; this->m_val=arg.m_val;}~Integer(){};int m_val;};Integer testFunc(Integer inter){ inter.m_val++; cout<<"before return"<<endl; return inter;}int main(int argc,char* argv[]){ Integer inter(5);//Constructor Integer resutl; //default constructor resutl=testFunc(2);//Constructor,then Copy Constructor,then Assignment operator cout<<resutl.m_val<<endl; getchar(); return 0;}运行结果:
思考:
1.main函数中加入如下一条语句会输出什么?
Integer re=inter;//输出Assignment operator还是Copy Constructor推理应该输出Assignment operator function。但实际输出结果是:Integer Copy Constructor。
原因是:赋值符函数不能创建新的对象,它要求”=”的左右对象均已存在,它的作用就是把”=”右边的对象的值赋给左边的对象。
2.main函数中加入如下一条语句会输出什么?
Integer re=testFunc(10);按照以上讨论,推理出输出结果应该是:
Integer Constructor
before return
Integer Copy Constructor
Integer Copy Constructor
但实际结果是:
原因是编译器自动优化的结果,只执行一次Copy Constructor来构造新的对象,不会再次调用Copy Constructor,以临时对象来构造新的对象。
以上就是详解C++ 中的临时对象的详细内容,更多关于c++ 临时对象的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++中const对象与const成员函数的实例详解const对象只能调用const成员函数:#includeusingnamespacestd;classA{
c++中,临时对象一旦不需要,就会调用析构函数,释放其占有的资源;而具名对象则是与创建的顺序相反,依次调用析构函数。c++源码:复制代码代码如下:classX{
C++this指针详解this是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址)。通过this,可以访问当前对象的成员变量和成员
C++中函数重载、覆盖与隐藏详解在C++语言中,函数扮演着很重要的角色,不管面向过程设计,还是基于对象设计;不管是面向对象编程,还是基于泛型编程,函数都可以随处
C/C++静态类和this指针详解1、静态类C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问。classCBook{public:staticd