2013-08-25 63 views
3

我是新来的C++,并有一个问题对全局变量全局变量。我在许多例子中看到,全局变量是指向堆的地址的指针。所以指针在全局/静态变量的内存中,并且地址背后的数据在堆上,对吧?
取而代之的是,你可以声明全局(无指针)是存储数据的变量。所以数据存储在内存中的全局/静态变量,而不是堆。
拥有此溶液与指针和堆的第一个解决方案的任何缺点?C++:为指针

编辑:
解决方案一:

//global 
Sport *sport; 
//somewhere 
sport = new Sport; 

解决方法二:

//global 
Sport sport; 

回答

1

你是对你的当对象位于假说。关于使用,
这是马的课程。没有明确的规则,它取决于您想要实现的功能类型的设计&。例如:
一个可以选择的指针版本实现lazy initializationpolymorphic behavior,这两者都不是可能的全球非指针对象的方法。

1

权。声明的变量进入DataSegment。他们坐在那里为这个节目的生命。你不能释放他们。你不能重新分配它们。在Windows中,DataSegment是一个固定的大小....如果你把所有东西都放在内存中(至少以前是这样的)。

1

存储在全局/静态变量数据的一个缺点是,该尺寸是固定在编译时和不能改变,而不是堆,其中可以在运行时确定的尺寸的储存和增长或收缩反复过运行。生命周期也被固定为程序从头到尾全局/静态变量的完整运行,而不是堆存储,它可以通过程序运行时获取和释放(甚至重复)。另一方面,全局和静态存储管理都是由编译器为您处理的,因为堆存储必须由您的代码明确管理。总之,全局/静态存储更容易,但不如堆存储灵活。