更智能的智能指针

时间:2016-04-27 23:44:58

标签: c++ smart-pointers

我认为指针在像std::shared_ptr这样自我清理后清理的概念很酷,但我想知道是否有更好的第三方智能指针。

shared_ptr的问题是递归引用的问题。当你有这样的事情时会发生这种情况:

class A{
  public:
  std::shared_ptr<A> other;

  A() { }
};

//Later
std::shared_ptr<A> a = std::make_shared<A>();
std::shared_ptr<A> b = std::make_shared<A>();
a->other = b;  //Memory leak
b->other = a;  //Memory leak

那里有一个更智能的智能指针可以感知我何时应该使用弱指针并且不泄漏(或者至少发出警告)? (经过短暂的谷歌搜索,我找不到任何东西)

2 个答案:

答案 0 :(得分:3)

弱指针正是这里应该使用的。

事实std::shared_ptr实现了基本的引用计数,而且没有什么,更多的是最近发现的东西。 C ++不是托管语言,也没有自动垃圾收集功能。因此,通过interface Position { void operateOnPlayer(Player player); } 的循环引用是有问题的。解决方案是弱指针。

答案 1 :(得分:0)

解决方案不是这样的:

print(array[0]) // prints: string
print(swiftyArray[1]) // prints: someOtherSwiftyString

解决方案是:

class A{
  std::weak_ptr<A> self;
  public:
  A() : self(*this) { }
};