C++11 Shared Ptr, использовать тот же счетчик ссылок

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

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

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

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

2 ответа

Решение

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

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

struct FooBar {
    Foo f;
    Bar b;
};
shared_ptr<FooBar> myFooBar;
Другие вопросы по тегам