【问题标题】:C++11 Shared Ptr, share the same reference counterC++11 Shared Ptr,共享同一个引用计数器
【发布时间】:2013-07-06 00:27:17
【问题描述】:

是否可以有 2 个不同的对象共享相同的引用计数器?

说我有

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

我希望两个对象都活着,直到有一个对 Foo 或 Bar 的引用(所以也许没有人在引用 Bar,但由于 Foo 被引用,所以两个对象都不会被删除)。

【问题讨论】:

  • 或者,我需要知道如何将 shared_ptr 重新解释为 shared_ptr
  • 闻起来像XY problem。为什么需要这个?
  • 这里有一个 C++ 提示:如果您认为需要转换但不知道如何转换,则不需要转换。
  • 如果没有人引用Bar,为什么还要保留它?
  • 关键是我已经转换了指针,所以我想出了如何转换指针。 (我正在使用哈希映射来保持类型安全)。现在的问题是切换到托管指针

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


【解决方案1】:

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

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

【讨论】:

  • 如果确实有必要,您可以使用 shared_ptr ctor 8 from outer space 将 shared_ptrs 获取到各个部分。
  • @R.MartinhoFernandes "来自外太空的 ctor 8" 太棒了!
【解决方案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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多