Я пишу программу на QT, которая в настоящее время имеет класс GameEngine
и класс MainWindow
.
GameEngine.h:
#include "Player.h"
class GameEngine : public QObject
{
Q_OBJECT
public:
void test();
signals:
void newPlayerDataReady(const std::vector<Player>* playerList);
private:
std::vector<Player> mPlayers; // List of player objects
}
GameEngine.cpp
#include "GameEngine.h"
// Omitting constructor and destructor for simplicity of the example
void GameEngine::test() {
emit newPlayerDataReady(&mPlayers);
}
GameEngine
хранит большое количество данных в массиве экземпляров Player (Player - довольно сложный класс с большим количеством различных членов), который должен храниться там для централизации логикипрограмма (короткая история).
MainWindow
- это класс графического интерфейса, который должен визуализировать данные, когда испускается сигнал newPlayerDataReady
, и представлять большую часть данных на графике., список и т. д. Это делается путем подключения сигнала к выделенному слоту в классе MainWindow
.Соединение создается в Main.cpp, который владеет экземпляром обоих классов.
Итак, мой вопрос: Если я хочу поделиться всеми этими данными из одного класса в другой, не позволяя получателю изменитьданные (доступ только для чтения), есть ли более распространенная практика для этого, чем использовать постоянные указатели на данные?
Не то, чтобы мне не нравилось это решение.Я просто хочу быть абсолютно уверенным, что я делаю это правильно с самого начала, а не переделывать много позже в этом процессе.
Я знаю, что можно было бы сделать одну альтернативу для обмена данными как копиями частного участника, но я не думаю, что это было бы гладкое решение, так как объем данных увеличится до точки, где это может повлиять на скорость программы.