我认为指针在像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
那里有一个更智能的智能指针可以感知我何时应该使用弱指针并且不泄漏(或者至少发出警告)? (经过短暂的谷歌搜索,我找不到任何东西)
答案 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) { }
};