Можно ли иметь 2 разных объекта, которые используют один и тот же счетчик ссылок?
Говорит у меня
shared_ptr<Foo> myFoo;
shared_ptr<Bar> myBar;
Я хочу, чтобы оба объекта были живы до тех пор, пока не будет одна ссылка на Foo или Bar (так что, возможно, никто не ссылается на Bar, но, поскольку на Foo есть ссылки, оба не будут удалены).
Поместите их в структуру и имейте shared_ptr
владеть этой структурой.
struct FooBar {
Foo f;
Bar b;
};
shared_ptr<FooBar> myFooBar;
ОК, отлично, я нашел ответ:
http://www.codesynthesis.com/~boris/blog/2012/04/25/shared-ptr-aliasing-constructor/
Конструктор псевдонимов! (код взят по ссылке)
struct data {...};
struct object
{
data data_;
};
void f ()
{
shared_ptr<object> o (new object); // use_count == 1
shared_ptr<data> d (o, &o->data_); // use_count == 2
o.reset (); // use_count == 1
// When d goes out of scope, object is deleted.
}