Проблема с дизайном указателей Boost SmartC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с дизайном указателей Boost Smart

Сообщение Anonymous »


Я впервые сталкиваюсь с интеллектуальными указателями в 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. Похоже, что интеллектуальные указатели в данном случае бесполезны. поэтому я пока использую необработанные указатели
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»