我认为像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有没有更智能的智能指针可以感知我什么时候应该使用弱指针,并且不会泄漏(或者至少给出一个警告)?(在谷歌上搜索了一下,我什么也找不到)
发布于 2016-04-28 07:48:55
弱指针正是这里应该使用的。
std::shared_ptr实现基本引用计数的事实并不是最近才发现的。C++不是一种托管语言,并且没有用于自动垃圾回收的工具。因此,通过std::shared_ptr进行循环引用是有问题的。解决方案是弱指针。
发布于 2016-04-28 07:55:18
解决方案不是这样的:
class A{
std::weak_ptr<A> self;
public:
A() : self(*this) { }
};解决方案是:
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>();https://stackoverflow.com/questions/36902813
复制相似问题