gpt4 book ai didi

C++ 全局变量生命周期

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:50 27 4
gpt4 key购买 nike

我有一个全局变量,它是一个类的实例。此类在其构造函数 (directX) 中创建了一个图像。

问题是我在运行时遇到访问冲突,但代码可以编译。我认为问题是在 winmain 函数中完成初始化之前调用了类构造函数。

所以我想知道的是

  1. 有没有人遇到过这个问题并且知道解决方案。

  2. 全局变量的生命周期是多少,我知道函数中声明的变量在函数返回后会丢失,并且编译器会查看代码以查看是否所有内容都匹配,这就是我们必须对函数进行原型(prototype)设计的原因,但在哪里做全局的进入等式。

最佳答案

您可能想查看类似 singleton pattern 的内容如果您真的想要一个全局实例,可以在初始化完成后对其进行初始化(本质上,图像将在您第一次引用它时构建,之后您将使用预先构建的版本)。

在调用 winmain 之前构造全局变量(以未定义的顺序)。它们会一直留在那里直到您的程序退出(此时我相信析构函数以未定义的顺序被调用)。

您可以使用的另一种(可能更简单)替代方法是将您的全局变量从类的实例更改为指向它的指针...然后您将得到类似的东西:

// global...
MyGlobalClass *bigGlobalImageHolder;

// Winmain
// Perform directX setup (don't know what that is)
// Create the image class
bigGlobalImageHolder = new MyGlobalClass();


// do the rest of your stuff... I'm guessing enter some kind of event loop

// clean up your global
delete bigGlobalImageHolder;
// exit your winmain (and application)

然后在您当前引用全局的任何地方,您都可以通过指针来引用它..

 // so
bigGlobalImageHolder.GetImage();
// becomes
bigGlobalImageHolder->GetImage();

关于C++ 全局变量生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5619938/

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