C++四种不同的对象生存方式
在C++中,有四种方法产生一个对象。
第一种方法是在堆栈(stack)之中产生:
void MyFunc()
{
CFoo foo;//在堆栈(stack)中产生foo对象
}
第二种方法是在堆(heap)中产生它:
void MyFunc()
{
CFoo* pFoo=new CFoo();//在堆(heap)中产生对象
}
第三种方法是产生一个全局对象(同时也必然是个静态对象)
CFoo foo;//在任何函数范围外做此操作
第四种方法是产生一个局部静态对象
void CMyFunc()
{
static CFoo foo;//在函数范围之内的一个金泰对象
}
不论哪一种做法,C++都会产生一个针对CFoo构造函数的调用操作。
前两种情况,C++在配置内存之后,立刻产生一个隐藏的构造函数调用。
第三种情况,由于对象实现于任何"函数活动范围"之外,显然没有地方来安置这样一个构造函数调用操作。第三种情况的构造函数调用操作必须靠startup代码帮忙。startup是早于程序进入点(main或WinMain)执行起来的代码,由c++编译器提供,被链接到程序中。startup代码可能做些像函数库初始化、进程信息设立、I/O stream产生等操作,以及对static对象的初始化操作(也就是调用其构造函数)。当编译器编译你的程序,发现一个静态对象时,它会把这个对象加到一个链表中,并且还加上一个指针,指向对象的构造函数及其参数。把控制权交给程序进入点之前,starup代码会遍历链表,调用所有登记的构造函数和参数,这样就初始化了静态对象。
第四种情况(局部静态对象)只会有一个实例产生,而且在固定的内存上(既不是stack也是heap)。它的构造函数在控制权第一次转移到其声明处(也就是在MyFunc第一次被调用)时被调用。
C++四种不同的对象生存方式的更多相关文章
- spring mvc中几种获取request对象的方式
在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- 转: .NET MVC3 几种返回 JSON 对象的方式和注意事项
.NET MVC3 几种返回 JSON 对象的方式和注意事项 转自:http://blog.csdn.net/xxj_jing/article/details/7382589 引言在用 .NET MV ...
- 四种常用的access连接方式
整理出四种常用的access连接方式,当然,第1种这是最常用的(推荐使用).1. set dbconnection=Server.CreateOBJECT("ADODB.CONNECTION ...
- JavaScript中四种不同的属性检测方式比较
JavaScript中四种不同的属性检测方式比较 1. 用in方法 var o = {x:1}; "x" in o; //true "y" in o; //fa ...
- jsp九大内置对象、四种作用域、跳转方式
jsp有四种属性范围: page -> 页面级别,显然只有在一个页面内可用. request -> 请求级别 服务器跳转,一次请求之后消失. session -> 会话级别 客户端跳 ...
- ASP.NET Core 四种释放 IDisposable 对象的方法
本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...
- SpringBoot:四种读取properties文件的方式
前言 在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作.今天就分享四种在Springboot中获取配置文件的方式. 注:前三种测试配置文件为springboot默认的applic ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
随机推荐
- Dojo系列教程
Dojo学习笔记一: 认识Dojo http://blog.csdn.net/lfsfxy9/article/details/8623897 <dojo 边学边用> http://www. ...
- 一行命令搞定VS2012无法安装cocos2d-x-2.1.4及创建跨平台项目(二)
转自:http://blog.csdn.net/yangjingui/article/details/9418843 由于上次发了一个比较二的方法来解决VS2012无法安装cocos2d-x-2.1. ...
- 基于Linux的集群系统(八)--转
引用位置:http://www.ibm.com/developerworks/cn/linux/cluster/linux_cluster/part8/index.html OSI参考模型及TCP/I ...
- 给大家普及一下CPU和SOC的基本知识,好让大家在盲目喝彩做出基本的判断
转载:http://bbs.tianya.cn/post-worldlook-544367-1.shtml 目前,华为推出了自己的四核手机,用自己的SOC,所以很多不明就里的人开始嚷嚷国产处理器的骄傲 ...
- PHP版根据经纬度和半径计算出经纬度的范围
百度地图提供了范围搜索的功能,但是它使用的是百度自己的数据,但是有时候我们需要使用自己的数据,显示在地图上.比如给定两个参数:指定位置(某一处的经纬度lnglat)和搜索半径(r),搜索指定范围内的数 ...
- BootStrap2学习日记23---图片轮播
<div id="carousel1" class="carousel slide"> <div class="carousel-i ...
- C# 之 HttpWebResponse类
提供 WebResponse 类的 HTTP 特定的实现. 继承层次结构 ,"System.Object→System.MarshalByRefObject→System.Net ...
- 2013年arcgis培训
关于开展“GIS空间分析及应用案例解析”培训班的通知 各企事业单位: 随着信息技术的发展,地理信息系统(简称GIS)产业异军突起,在国民经济各个行业中的应用日益广泛,物联网.智慧地球.3S技术等等 ...
- WebStrom9 体验nodejs
之前就有体验过 WebStrom8.0.3 版本,确实不错. 最喜欢的是集成了Terminal 很方便的使用NPM,今天装上发现 Terminal 死活打不上字.什么原因! WebStrom9 在wi ...
- 利用apktool反编译apk
下载apktool所需文件: a. apktool1.5.2.tar.bz2 b.apktool-install-windows-r05-ibot.tar.bz2 (windows系统) 步骤阅读 ...