2013-09-01 4 views
2

Есть ли способ узнать, кто является владельцем объекта? Допустим, класс A содержит указатель класса B как члена данных. Есть ли способ, которым B может знать, кто владеет им?Как узнать класс владельца объекта

Любая помощь для меня очень много значит.

+7

Что делать, если несколько объектов содержат указатели на экземпляр B? –

+1

Если вы хотите, чтобы класс знал своего «владельца» (что может означать много вещей в разных контекстах), вам придется передать указатель владельцу на конструктор класса и сохранить его. –

+1

Нет волшебного способа сделать это. Если вы хотите, чтобы концепция одного объекта принадлежала другому, вы должны реализовать его в некотором коде. Детали этого будут в значительной степени зависеть от того, что вы пытаетесь сделать. – john

ответ

5

Понятие «собственность» не встроено в язык C++. Это концепция дизайна, используемая программистами для понимания своего собственного кода, а не языка. Обычно это означает некоторый объект кода, который несет ответственность за освобождение ресурса (например, объекта с динамическим распределением), но иногда это означает что-то другое.

Таким образом, нет никакого способа вообще определить объект для определения его «собственности», поскольку существует более чем один способ, которым код, использующий объект, может определять и управлять собственностью.

В зависимости от того, что означает ваша собственность, boost::enable_shared_from_this может вам помочь. Он позволяет объекту (или кому-то со ссылкой на него) участвовать в совместном владении этим объектом, но он все еще не говорит, что вам нужны другие объекты, с которыми он делится. Поэтому полезно, если вам действительно не нужно знать о экземпляре A, вам просто нужен экземпляр B, чтобы он не был выпущен. A, и все, кто интересуется жизненным циклом экземпляра B, будут содержать shared_ptr до B, которые они приобрели с помощью функции shared_from_this.

Для получения доступа к экземпляру A необходимо создать собственный механизм. Например, вы могли бы сохранить указатель на экземпляр A в экземпляре B.

Смежные вопросы