Как сделать общий указатель из необработанного указателя и сообщить об этом другим общим указателям?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать общий указатель из необработанного указателя и сообщить об этом другим общим указателям?

Сообщение Anonymous »

У меня есть некоторая иерархия (через композицию, а не наследование) классов: дочерний и родительский. Дочерний элемент может иметь несколько родителей, и родительский элемент может делать то же самое. Я хочу, чтобы время существования дочернего класса управлялось родительскими классами.
Структура класса:

Код: Выделить всё

class Parent
{
public:
std::shared_ptr my_chld;
};

class Child
{
...some stuff...
public:
void setParent(Parent* parent)
{
parent->my_child=this;
}
};
И main() выглядит так:

Код: Выделить всё

Parent* prnt1=new Parent();
Parent* prnt2=new Parent();
Child* chld=new Child();
chld->setParent(prnt1);
chld->setParent(prnt2);
delete prnt1;
И я хочу, чтобы ребенок оставался в живых до тех пор, пока все родители не будут удалены (чтобы они управляли жизнью ребенка), как это сделать? В моей версии указатель my_chld не знает о другом указателе, управляющем тем же объектом, так что это проблема. Или этот подход совершенно неправильный?
РЕДАКТИРОВАТЬ:
Чтобы объяснить контекст. Я предпочитаю использовать необработанные указатели в main, потому что я пишу свою собственную библиотеку графического интерфейса, что-то вроде Qt, и в настоящее время реализую систему анимации, где одна и та же анимация (дочерний элемент) может использоваться в нескольких местах (несколько групп анимации( Родитель) или другие объекты). И, как и в других фреймворках, пользователь создает в основном все в куче с новым там, где это необходимо. И, как и в Qt/GTK, указатели становятся недействительными после уничтожения родителя, поскольку право собственности на объекты перешло к родителю.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ters-aware
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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