gpt4 book ai didi

C++ static , extern 与全局数据一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:15 24 4
gpt4 key购买 nike

总的来说,我是 C++ 和 OOP 的新手,一直在努力学习高效或“正确”的做事方式,但仍然遇到问题。

我正在创建一个 DataStore 类来保存其他类/对象的数据。此类永远只有一个实例/对象;但是,实际上并不需要对象/实例,因为它是全局数据,对吧。在这种情况下,我觉得这只是提供范围的一种方式。所以,我想直接更改类成员而不是传递对象。我读过有关 static 和 _extern 的内容,但我无法决定两者是否可行,或者是否还有其他更好的方法。

现在我正在传递一个创建的对象来改变它的数据,但我宁愿这个类被作为“它自己”而不是“它自己的一个实例”来访问,同时仍然保留它是一个对象的想法.

最佳答案

通常,这类问题(您需要一个,但永远只需要一个 - 而且您确定您永远不需要更多)可以通过使用“单例”模式来解决。

class Singleton
{
public:
static Singleton* getInstance()
{
if (!instance) instance = new Singleton();
return instance;
}

int getStuff() { return stuff; }


private:
Singleton() { stuff = 42; }
static Singleton *instance;
int stuff;
};

然后在一些合适的 .cpp 文件中>

static Singleton *instance;

或者直接使用全局变量:

class Something
{
public:
Something() { stuff = 42; }

int getStuff() { return stuff; }

private:
int stuff;
}

extern Something global_something; // Make sure everyone can find it.

在一个 .cpp 文件中:

Something global_something; 

由于这两者本质上都是一个全局变量解决方案,我希望不喜欢全局变量的人会对它投反对票,但如果您不想到处传递类对象,那么全局变量并不是一个糟糕的主意。您只需要知道全局变量作为一般解决方案不一定是一个好主意。可能很难理解正在发生的事情,如果你突然需要多个(因为你决定更改代码以支持两种不同的存储,或其他),它肯定会变得困惑 - 但这也适用于单例。

关于C++ static , extern 与全局数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495979/

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