gpt4 book ai didi

c++ - 存储在全局变量中的数据和存储在堆中的数据有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:11 24 4
gpt4 key购买 nike

int globalInt = 1; 

int main(){
int* heapInt = new int(1);
}

globalInt 和 heapInt 有什么区别?我知道 heapInt 指向的是在堆中,我知道 globalInt 进入一些全局数据存储,但有什么区别?为什么要使用一个而不是另一个?

提前感谢您的帮助。

最佳答案

全局变量具有静态存储期限。这意味着该对象从程序开始到结束都存在。它在整个程序期间都存在。

用 new 表达式创建的 int 具有动态存储持续时间。它的生命周期从 new 表达式开始,到您执行 delete heapInt; 时结束。

您可以将这两个存储持续时间视为频谱的两端。全局变量使您对其生命周期的控制最少,因为它始终存在。动态分配的对象为您提供最大程度的控制,因为您可以在代码中的任何位置创建和销毁它。

还值得注意的是,全局变量有一个名称。这使得该名称在范围内的代码的所有部分都可以访问该对象。相反,要访问动态分配的对象,您需要获得指向它的指针。

全局变量通常被认为是不好的做法,因为它们将全局状态引入您的程序。也就是说,您可能有一个函数修改或使用全局变量,但没有在其接口(interface)中明确说明它这样做。这意味着该函数可能有 secret 的副作用,导致难以测试的不可预测和不可维护的代码。

另一方面,动态分配的对象通常是必需的,但应谨慎使用。确保对象的生命周期得到适当管理很重要。一种方法是使用 RAII ,其中对象仅在构造函数中动态分配,然后相应地在析构函数中销毁。另一种现代方法是避免完全自己进行内存管理,而是使用智能指针。

关于c++ - 存储在全局变量中的数据和存储在堆中的数据有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com