首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更聪明的智能指针

更聪明的智能指针
EN

Stack Overflow用户
提问于 2016-04-28 07:44:58
回答 2查看 83关注 0票数 1

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

shared_ptr的问题在于递归引用。当你有这样的东西时,就会发生这种情况:

代码语言:javascript
复制
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

有没有更智能的智能指针可以感知我什么时候应该使用弱指针,并且不会泄漏(或者至少给出一个警告)?(在谷歌上搜索了一下,我什么也找不到)

EN

回答 2

Stack Overflow用户

发布于 2016-04-28 07:48:55

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

std::shared_ptr实现基本引用计数的事实并不是最近才发现的。C++不是一种托管语言,并且没有用于自动垃圾回收的工具。因此,通过std::shared_ptr进行循环引用是有问题的。解决方案是弱指针。

票数 3
EN

Stack Overflow用户

发布于 2016-04-28 07:55:18

解决方案不是这样的:

代码语言:javascript
复制
class A{
  std::weak_ptr<A> self;
  public:
  A() : self(*this) { }
};

解决方案是:

代码语言:javascript
复制
class A : std::enable_shared_from_this<A>
{

  void use_me()
  {
     // say i need to pass a shared_ptr to myself to some other function...
     foo(this->shared_from_this());
  }
};

auto var = std::make_shared<A>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36902813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档