C ++ 11 Shared Ptr, общий счетчик ссылок

Можно ли иметь 2 разных объекта, которые используют один и тот же счетчик ссылок?

Говорит у меня

shared_ptr<Foo> myFoo;
shared_ptr<Bar> myBar;

Я хочу, чтобы оба объекта были живы до тех пор, пока не будет одна ссылка на Foo или Bar (так что, возможно, никто не ссылается на Bar, но, поскольку на Foo есть ссылки, оба не будут удалены).

0

Решение

Поместите их в структуру и имейте shared_ptr владеть этой структурой.

struct FooBar {
Foo f;
Bar b;
};
shared_ptr<FooBar> myFooBar;
7

Другие решения

ОК, отлично, я нашел ответ:
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.
}
0

По вопросам рекламы [email protected]