Проблема с дизайном указателей Boost Smart ⇐ C++
-
Anonymous
Проблема с дизайном указателей Boost Smart
Я впервые сталкиваюсь с интеллектуальными указателями в C++, и у меня есть некоторые проблемы с пониманием. Я хочу разработать своего рода компонентную структуру OpenGL.
Итак, у меня есть класс Scene, который создает узлы (и сохраняет их для себя) и возвращает их какshared_ptr. Класс Node имеет список компонентов, которые создаются в классе Node и снова возвращаются какshared_ptr, НО этим компонентам также нужна ссылка на их владельца (Node), а сам Node должен передать свой указатель на свои компоненты.
Теперь: указатель на Node в его компонентах, каким он должен быть? общий_ptr или слабый_ptr. и как передать это в сам узел (узел не имеет ссылки на свой общий_ptr, который хранится в сцене)
//! РЕДАКТИРОВАТЬ 1
класс Сцена { узлы вектор; публика: слабый_ptr NewNode(); } класс Узел { компоненты вектора; публика: слабый_ptr AddComponent(); слабый_ptr GetComponent (имя класса String); vecotr GetComponents (имя класса String); } Класс Компонент { слабый_ptr владелец; Компонент (weak_ptr Owner_refernce); публика: // материал компонента слабый_ptr GetOwner(); дружественный класс Node; } Пожалуйста, помогите мне сделать здесь лучший дизайн.
// EDIT1: чтобы было понятнее!
Scene является единственным ВЛАДЕЛЬЦЕМ узла. Оно создает и уничтожает их. Каждый Узел ВЛАДЕЕТ всеми своими Компонентами. Оно создает и разрушает их. А компонентам нужна ссылка на своих владельцев, которой они будут делиться с другими объектами (путем возврата владельца в методе Get).
-> Сцене принадлежат узлы, а узлам принадлежит компонент.
-> Сцена использует общие узлы (возвращает объект узла по имени)
-> Узел совместно использовал все свои компоненты (возврат компонента по имени класса)
-> Компоненты имеют общего владельца (возвращают ссылку на владельца)
Как я могу делиться объектами, не разделяя права собственности? слабый_ptr ??
РЕДАКТИРОВАНИЕ 2. Похоже, что интеллектуальные указатели в данном случае бесполезны. поэтому я пока использую необработанные указатели
Я впервые сталкиваюсь с интеллектуальными указателями в C++, и у меня есть некоторые проблемы с пониманием. Я хочу разработать своего рода компонентную структуру OpenGL.
Итак, у меня есть класс Scene, который создает узлы (и сохраняет их для себя) и возвращает их какshared_ptr. Класс Node имеет список компонентов, которые создаются в классе Node и снова возвращаются какshared_ptr, НО этим компонентам также нужна ссылка на их владельца (Node), а сам Node должен передать свой указатель на свои компоненты.
Теперь: указатель на Node в его компонентах, каким он должен быть? общий_ptr или слабый_ptr. и как передать это в сам узел (узел не имеет ссылки на свой общий_ptr, который хранится в сцене)
//! РЕДАКТИРОВАТЬ 1
класс Сцена { узлы вектор; публика: слабый_ptr NewNode(); } класс Узел { компоненты вектора; публика: слабый_ptr AddComponent(); слабый_ptr GetComponent (имя класса String); vecotr GetComponents (имя класса String); } Класс Компонент { слабый_ptr владелец; Компонент (weak_ptr Owner_refernce); публика: // материал компонента слабый_ptr GetOwner(); дружественный класс Node; } Пожалуйста, помогите мне сделать здесь лучший дизайн.
// EDIT1: чтобы было понятнее!
Scene является единственным ВЛАДЕЛЬЦЕМ узла. Оно создает и уничтожает их. Каждый Узел ВЛАДЕЕТ всеми своими Компонентами. Оно создает и разрушает их. А компонентам нужна ссылка на своих владельцев, которой они будут делиться с другими объектами (путем возврата владельца в методе Get).
-> Сцене принадлежат узлы, а узлам принадлежит компонент.
-> Сцена использует общие узлы (возвращает объект узла по имени)
-> Узел совместно использовал все свои компоненты (возврат компонента по имени класса)
-> Компоненты имеют общего владельца (возвращают ссылку на владельца)
Как я могу делиться объектами, не разделяя права собственности? слабый_ptr ??
РЕДАКТИРОВАНИЕ 2. Похоже, что интеллектуальные указатели в данном случае бесполезны. поэтому я пока использую необработанные указатели
Мобильная версия