全局变量的最佳实现

时间:2013-05-31 22:07:50

标签: c++ class object

我的一个班级中有一个变量:

Object * myObject;

我现在需要其他课程才能在其他课程中访问。

什么是能够访问它的最佳方式?

以下实施是否正确?

#ifndef GLOBALS_H
#define GLOBALS_H

#include "Object.h"

Object * myObject[5][5];

#endif

编辑:

多一点信息,基本上我有A级和B级。

类A具有类B需要访问的变量myObject。 A类还有一个B类对象,这意味着我不能在B类的标题中包含A类的标题,因为A类的标题包含B类。

3 个答案:

答案 0 :(得分:3)

将对象的引用传递给其他感兴趣的类将是更可取的。假设你不能做到这一点而且确实需要一个全局性的,那么

会更好
extern Object * myObject;
在globals.h和

Object * myObject;
globals.cpp中的

否则每个包含globals.h的源文件都会选择myObject

的重复定义

答案 1 :(得分:2)

如果所有类共享同一个对象,则可以将其作为静态变量添加到基类中。

class base
{
    static Object* myObject;
};

class inherit : base
{
    void foo()
    {
         // can access myObject
    }
};

class inherit2 : base
{
    void bar()
    {
         // can access myObject
    }
};

答案 2 :(得分:0)

存储全局变量的社会最可接受的解决方案绝对是singleton。 C ++中的典型实现如下所示:

#include <iostream>
using namespace std;

class Singleton
{
public:
        static Singleton& Get() {
                static Singleton singleton;
                return singleton;
        }

        void DoSomething() { cout << "Something!\n"; }

private:
        Singleton() {}
};

int main()
{
        Singleton::Get().DoSomething();
}

这比典型的全局变量的主要优点是您可以更好地控制对象的构造方式。

只是不要忘记它仍然是一个全局变量,所以你应该只在它是最不利的替代品时使用它。