Понятие «собственность» не встроено в язык C++. Это концепция дизайна, используемая программистами для понимания своего собственного кода, а не языка. Обычно это означает некоторый объект кода, который несет ответственность за освобождение ресурса (например, объекта с динамическим распределением), но иногда это означает что-то другое.
Таким образом, нет никакого способа вообще определить объект для определения его «собственности», поскольку существует более чем один способ, которым код, использующий объект, может определять и управлять собственностью.
В зависимости от того, что означает ваша собственность, boost::enable_shared_from_this
может вам помочь. Он позволяет объекту (или кому-то со ссылкой на него) участвовать в совместном владении этим объектом, но он все еще не говорит, что вам нужны другие объекты, с которыми он делится. Поэтому полезно, если вам действительно не нужно знать о экземпляре A
, вам просто нужен экземпляр B
, чтобы он не был выпущен. A
, и все, кто интересуется жизненным циклом экземпляра B
, будут содержать shared_ptr
до B
, которые они приобрели с помощью функции shared_from_this
.
Для получения доступа к экземпляру A
необходимо создать собственный механизм. Например, вы могли бы сохранить указатель на экземпляр A
в экземпляре B
.
Что делать, если несколько объектов содержат указатели на экземпляр B? –
Если вы хотите, чтобы класс знал своего «владельца» (что может означать много вещей в разных контекстах), вам придется передать указатель владельцу на конструктор класса и сохранить его. –
Нет волшебного способа сделать это. Если вы хотите, чтобы концепция одного объекта принадлежала другому, вы должны реализовать его в некотором коде. Детали этого будут в значительной степени зависеть от того, что вы пытаетесь сделать. – john