C ++:全局变量作为指针

时间:2013-08-25 13:17:45

标签: c++ variables memory global

我是c ++的新手,对全局变量有一个问题。我在很多例子中看到全局变量是指向堆地址的指针。所以指针在全局/静态变量的内存中,地址后面的数据在堆上,对吧?
您可以声明存储数据的全局(无指针)变量,而不是这个。因此,数据存储在内存中以用于全局/静态变量,而不是存储在堆上。
这个解决方案是否比使用指针和堆的第一个解决方案有任何缺点?

编辑:
第一种解决方案:

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

第二个解决方案:

//global
Sport sport;

3 个答案:

答案 0 :(得分:1)

您对物体所在位置的假设是正确的。关于用法,
这是课程的马匹。没有明确的规则,这取决于设计和您要实现的功能类型。例如:
可以选择指针版本来实现lazy initializationpolymorphic behavior,使用全局非指针对象方法都不可能。

答案 1 :(得分:1)

右。声明的变量放在DataSegment中。他们坐在那里度过了整个计划的生命。你不能释放它们。你无法重新分配它们。在Windows中,DataSegment是一个固定大小....如果你把所有东西放在那里你可能会耗尽内存(至少它曾经是这样)。

答案 2 :(得分:1)

将数据存储在全局/静态变量中的一个缺点是,大小在编译时是固定的,并且不能更改,而不是堆存储,其中大小可以在运行时确定并在重复上增大或缩小跑。对于全局/静态变量而言,生命周期也固定为程序从头到尾的完整运行,而不是堆存储,它可以在程序的运行时间内获取和释放(甚至重复)。另一方面,编译器会为您处理全局和静态存储管理,而您的代码必须明确管理堆存储。总而言之,全局/静态存储更容易,但不如堆存储灵活。