shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助。
shared_ptr最初实现于Boost库中,后来被C++标准委员会收录于TR1技术报告中,成为C++0x的一部分。
使用shared_ptr解决的主要问题是知道删除一个被多个客户共享的资源的正确时机。下面是一个简单易懂的例子,有两个类 A和 B, 它们共享一个int实例。
include
include
using namespace std;
class A {
shared_ptr no_;
public:
A(shared_ptr no) : no_(no) {}
void value(int i) {
*no_=i;
}
};
class B {
shared_ptr no_;
public:
B(shared_ptr no) : no_(no) {}
int value() const {
return *no_;
}
};
int main() {
shared_ptr temp(new int(14));
A a(temp);
B b(temp);
a.value(28);
cout<<”hello:”<