C ++ 11 Shared Ptr,共享相同的引用计数器

时间:2013-07-08 15:36:35

标签: c++ c++11 shared-ptr reference-counting

是否可以有2个不同的对象共享同一个参考计数器?

我说

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

我希望两个对象都存活,直到有一个对Foo或Bar的引用(所以可能没有人引用Bar,但是因为引用Foo都不会被删除)。

2 个答案:

答案 0 :(得分:7)

将它们放在一个结构中,让shared_ptr拥有该结构。

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

答案 1 :(得分:0)

好的,我找到了答案: 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.
}