Если вам абсолютно необходимо иметь некоторые глобальные объекты, то самый простой способ - просто объявить их extern
в заголовочном файле, включенном в любое место, которому требуется доступ к ним, и определить их в одном исходном файле.
Ваш способ # 1 использует класс только с static
членами, что означает, что он по сути выполняет работу с пространством имен, так почему бы просто не использовать пространство имен?
Способ № 2 агрегирует оба объекта в одном классе, но если между двумя объектами нет истинной взаимозависимости, особого преимущества для этого нет.
Я бы рекомендовал поместить объекты в namespace
для предотвращения загрязнения глобального пространства имен потенциально общими идентификаторами, такими как data1
,
// File: globaldata.h
#ifndef GLOBALDATA_H
#define GLOBALDATA_H
#include "Object.h" // Definition of Object might be here
namespace GlobalData
{
extern Object data1;
extern Obejct data2;
}
#endif GLOBALDATA_H
.
// File: globaldata.cc
#include globaldata.h
namespace GlobalData
{
Object data1;
Object data2;
}
Тогда вы можете получить к ним доступ в других местах, подобных этому.
#include "globaldata.h"
// Does something with global data
void f()
{
GlobalData::data1.doSomething();
}