По сути, у меня есть одна структура, которая содержит объекты для обмена между классами следующим образом:
struct CoreComponents
{
std::unique_ptr<a> m_A = std::make_unique<a>();
std::unique_ptr<b> m_B;
std::unique_ptr<c> m_C = std::make_unique<c>();
};
И в моем основном классе я владею им через unique_ptr ;
class Game
{
...
private:
std::unique_ptr<CoreComponents> m_Components;
...
};
Тогда у меня есть другие n классы, которые мне нужны для доступа к этому m_Components объекту из его функций без создания копий. (я не буду изменять содержимое этого объекта)
Я пытался использовать shared_ptr для хранения m_Components в Game классе, а затем передать его другим классам ( их конструкторам) через значение и сохраните его, но этот сценарий вызывает утечки памяти. (я использую memcheck для проверки утечек) Я узнал, что это причина утечки, но я не мог понять, почему именно.
сценарий Shared_ptr
Конструктор класса, который мне нужен для доступа к объекту CoreComponents;
GameScene::GameScene(std::shared_ptr<CoreComponents> components)
: m_Components(std::move(components))
Я пытаюсь сохранить его как член класса GameScene, а затем использовать его в функциях;
std::shared_ptr<CoreComponents> m_Components;
И вот как я передаю его из класса Game;
auto gs = std::make_unique<GameScene>(m_Components)
Общее использование внутри класса GameScene;
m_Components->m_A->draw(*m_OtherObjectInsideGameScene);
Так, каков наилучший способ создать подобный дизайн, используя современный c ++?
Я пытался избежать паттерна синглтона, но нужно ли его использовать для достижения этой цели или это возможно при более эффективном использовании интеллектуальных указателей?
PS: Структура CoreComponents должна быть удалена из памяти при разрушении класса Game.