当前位置:首页 > 编程开发

匿名对象生存周期

webgou17年前 (2009-10-27)编程开发198
匿名对象生存周期什么是匿名对象?匿名对象简单的说就是没有名字的对象,和临时对象是完全不相同的。比如交换两个变量a、b的值通常做法是使用一个临时变量c int a=1,b=2,c; c=a; a=b; b=c; 这样的一个过程这里的c在这个过程之后就不在需要,但交换过程中就须要这样一个对象存在,那么这个c就是一个临时对象。而匿名对象则根本没有名字,这点在C++中很常见。比如你要连接一个两个字符串然后输出。 int main() { string a("aaa"),b("bbb"); printf("%s",(a+b).c_str() ); return 0; } 这个时候输出的就是aaabbb这样的一个字符串,当然原来的变量a,b都没有任何变化。这是因为string类重载了+号函数大致如下(当然STL中的不是这个样子,我这样是为了简便,但功能是相同的) string operator+(string& opt1,string& opt2); 该函数返回一个string对象,而例子程序中并没有出现这个对象,但这个对象却却实实存在着。编译器大致会将程序代码处理成这个样子。其中_1234897erw_是我随便打的名字实际上编译器可能随机生成一个名字,这个对象的有效范围就是{}之中的范围。简单的说就是匿名对象存在的当前行是有效的,一旦到了下一行,这个对象就已经无效。 int main() { string a::a("aaa"); string b::b("bbb"); { string _1234897erw_ = a+b;构造对象 printf("%s",_1234897erw_.c_str() ); _1234897erw_::~_1234897erw_();析构对象 } b::~b(); a::~a(); return 0; } 关于临时变量很常见的错误就是 int main() { string a("aaa"),b("bbb"); const char* p = (a+b).c_str(); printf("%s", p); return 0; } 虽然这样在很多编译器上可以正常输出结果,但这样的做法是错误的。按照匿名变量的生存范围来说p所指向的内容只在当前行有效,一旦到了printf的这一行,p所指向的内容已经无效。所以输出的内容也是不正确的,虽然有时候可以正常输出。 为什么会正常输出,这依赖于库的实现。在匿名string析构的时候,会将所分配的内存空间释放,然而这个释放并不是将原来的内容清除,仅仅是将这块内存空间标志为可用,里面的内容可能不清除(效率因素)。这块内存的内容不清除的话,还是能够得到其内容的(取内容之需要一个*操作符),但这块内存不是你所拥有的,这个时候正确也只是运气。 转载出处:http://blog.csdn.net/akirya/archive/2007/03/13/1527541.aspx

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=73

标签: c语言
分享给朋友:

“匿名对象生存周期” 的相关文章

Android Animation

在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Andro…

axis支持的类型

那些java的对象是可以序列化为xml的, 并且可以从xml反序列化为java对象的?那些对象与xml之间不能够序列化和反序列化?在开发的时候应该注意哪些问题?根据我的理解, 有如下几种对象:1)axis1.2内在支持的几种对象类型。     &nb…

android 签名

所有的android程序都需要签名1. 为什么要签名...…

Android选项卡具体代码编写方式介绍

在对Android操作系统进行相应修改中,我们可以发现,这一系统的编程方式非常简单易懂,方便开发人员实现各种功能需求。在这里就先从Android选项卡的实现来具体了解一下这一系统的编写方式。首先创建Android工程命名自己的Activity为HelloTabWidget在main.xml或者自己定…

Android图片大小调整动态实现方法

Android操作系统中对于图片的操作我们在以前的文章中也有所介绍。不过对于图片的大小调整往往都局限于固定的调整。如何才能满足动态大小调整呢?我们在这里就为大家详细介绍有关Android图片大小调整的动态实现方法。昨天,动态获取图片资源获取的很爽啊,后来,换了一张png,128*128的,Run a…

ARM处理器杂谈

ARM ARM 结构, ARM处理器.现在,应用非常广泛,应用于嵌入式系统中,像手机,ATM取款机,车载设置,录音笔. ARM在维基百科里的定义: The ARM is a 32-bit reduced instruction set computer (RISC) instruction set…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。