c++四种不同的对象生存方式

转载 2007年09月25日 10:40:00
在C++ 中,有四种方法可以产生一个对象。第一种方法是在堆栈(stack)之中产生它:

void MyFunc()
{
CFoo foo; // 在堆栈(stack)中产生foo 对象
...
}
第二种方法是在堆积(heap)之中产生它:
void MyFunc()
{
...
CFoo* pFoo = new CFoo(); // 在堆(heap)中产生对象
}
第三种方法是产生一个全域对象(同时也必然是个静态对象):
CFoo foo; // 在任何函数范围之外做此动作
第四种方法是产生一个区域静态对象:
void MyFunc()
{
static CFoo foo; // 在函数范围(scope)之内的一个静态对象
...
}
不论任何一种作法,C++ 都会产生一个针对CFoo 构造式的调用动作。前两种情况,C++
在配置内存-- 来自堆栈(stack)或堆积(heap)-- 之后立刻产生一个隐藏的(你的原
代码中看不出来的)构造式调用。第三种情况,由于对象实现于任何「函数活动范围
(function scope)」之外,显然没有地方来安置这样一个构造式调用动作。
是的,第三种情况(静态全域对象)的构造式调用动作必须靠startup 码帮忙。startup 码
是什么?是更早于程序进入点(main 或WinMain)执行起来的码,由C++ 编译器提供,
被联结到你的程序中。startup 码可能做些像函数库初始化、进程信息设立、I/O stream 产
生等等动作,以及对static 对象的初始化动作(也就是调用其构造式)。
当编译器编译你的程序,发现一个静态对象,它会把这个对象加到一个串行之中。更精
确地说则是,编译器不只是加上此静态对象,它还加上一个指针,指向对象之构造式及
其参数(如果有的话)。把控制权交给程序进入点(main 或WinMain)之前,startup 码
会快速在该串行上移动,调用所有登记有案的构造式并使用登记有案的参数,于是就初
始化了你的静态对象。
第四种情况(区域静态对象)相当类似C 语言中的静态区域变量,只会有一个实体
(instance)产生,而且在固定的内存上(既不是stack 也不是heap)。它的构造式在
控制权第一次移转到其声明处(也就是在MyFunc 第一次被调用)时被调用。 

四种不同的对象生存方式

在C++ 中,有四种方法可以产生一个对象。 第一种方法是在堆栈(stack)之中产生它:void MyFunc(){CFoo foo; // 在堆栈(stack)中产生foo 对象...} 第二种方法...
  • xtdga
  • xtdga
  • 2009年12月13日 22:17
  • 290

四种对象的生存方式

1  in stack: void myfunc() { CFoo foo ;  //in stack ; } 2  in heap void myfunc() { CFoo* fo...
  • zifeng19811020
  • zifeng19811020
  • 2013年10月23日 16:41
  • 226

c++11中四种类型转换

1、  static_cast: 功能:完成编译器认可的隐式类型转换。 格式type1 a; type2 b = staic_cast(a);将type1的类型转化为type2的类型; 使用范...
  • bian_qing_quan11
  • bian_qing_quan11
  • 2017年04月26日 10:44
  • 953

使用4种不同的方式访问数组中的元素

#include void main() { int i; int a[10]={1,2,3,4,5}; int *p=a; //利用数组名加下标的方式访问数组元素 for(i=0;i ...
  • WSF861559021
  • WSF861559021
  • 2011年11月23日 21:14
  • 377

c++中的四种类型转化详解

隐式转换(implicit conversion) short a=2000; int b; b=a; short是两字节,int是四字节,由short型转成int型是宽化转换...
  • lvfengchang1220
  • lvfengchang1220
  • 2015年05月13日 21:44
  • 633

c++四种分配内存的方法整理

只有calloc会自动初始化申请的内存为0calloc 函数: void *calloc(unsigned int num, unsigned int size)按照所给的数据个数和数据类型所占字节数...
  • hyqsong
  • hyqsong
  • 2016年03月22日 07:34
  • 381

浏览器保存网页的四种方式

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mikewang.blog.51cto.com/3826268/1206701 ...
  • sfshine
  • sfshine
  • 2014年01月07日 11:40
  • 2072

c++程序实体的生存期和作用域

每个程序实体在程序执行中都有从创建到被撤消的一段时间,这段时间就称为该程序实体的生存期。在生存期内程序实体的标识符与它的存储区相关联。因此,程序实体的生存期由系统为其分配的内存方式所决定。C++为程序...
  • dalaolinw
  • dalaolinw
  • 2013年12月30日 14:49
  • 341

C++对象之间通信的三种常见方式

经过这一年多对C++的使用,总结出了下边的三种常见对象之间的通信方式。这里就不上代码了。只作为一种设计思想,记录下来方便自已以后使用,和大家一起学习,这只是自已在工作中的总结,如果谁有更好的经验,请回...
  • fengmm521
  • fengmm521
  • 2017年11月03日 18:53
  • 243

C++四种类型转换机制

本文主要借鉴自cplusplus中关于类型转换的内容。传统的类型转换主要有以下两种形式:double x = 10.3; int y; y = int (x); // functional no...
  • Swartz2015
  • Swartz2015
  • 2017年04月07日 21:50
  • 836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++四种不同的对象生存方式
举报原因:
原因补充:

(最多只允许输入30个字)