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 第一次被调用)时被调用。 

相关文章推荐

四种不同对象的生存方式(栈、堆、全局、局部静态)

四种不同对象的生存方式(栈、堆、全局、局部静态) //东软2012-11月笔试题 class Sample { int x; public: Sample(int...

C++对象的4种生存方式

在C++中,有4种不同的方式来产生一个对象。现在我们有一个类叫做CMyClass,我们可以可以用如下4种不同方式来产生一个对象:一、在栈(stack)中产生:void MyFunc() { ....

C/C++中四种不同的类型转换方式

使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。   1 static_cast 用法:sta...

IOS开发---JSON不同的四种解析方式

  • 2012年12月12日 14:34
  • 173KB
  • 下载

C++_类_对象的生存周期

C++中对象的生存周期

C++对象的生存周期

转自:http://blog.jobbole.com/99484/ 代码 代码说明: 类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象...

一个例子记住C++对象的生存周期

内存的三种分配方式最近要考C++,复习过程中遇到一些问题,总结记录一下。文中代码均在ideone在线编译器中运行的。代码代码说明: 类A,含构造函数和析构函数 普通函数fun,函数体里新建了类A的局部...

二叉树的四种遍历方式:递归、非递归+栈、Morris(后序非递归还有一种单栈和双栈的不同版本)

本文参考: 参考文章1 参考文章2 参考文章3 代码中加入了一些自己的理解/* 二叉树的四种遍历方式 */ #include #include using namespace std;//...

Hive表中四种不同数据导出方式以及如何自定义导出列分隔符

文章转载于http://blog.csdn.net/niityzu/article/details/42238483 问题导读: 1、Hive表数据四种导出方式是? 2、导出命令中LOC...

WPF开发学习:资源在内外部定义的不同方式和怎么引用,Style样式的四种使用(对比CSS)

在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1.      内联样式表:即直接设置元素的style属性 2.      嵌入样式表:即在html页面上写一个……..代码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++四种不同的对象生存方式
举报原因:
原因补充:

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