std::shared_ptr结构体
时间: 2023-09-15 13:19:07 浏览: 181
`std::shared_ptr` 并不是一个结构体,而是 C++11 引入的智能指针(smart pointer)之一,用于管理动态分配的内存。它是一个类模板,可以用于管理任意动态分配的对象。其主要特点是多个 `shared_ptr` 可以共享同一块内存,并且会自动在不再需要时释放它。
`std::shared_ptr` 的实现是基于计数引用(reference counting)的。每个 `shared_ptr` 都会有一个计数器,记录当前有多少个 `shared_ptr` 指向同一块内存。当所有的 `shared_ptr` 都不再需要这块内存时,它们会自动删除内存。
使用 `std::shared_ptr` 的示例代码如下:
```c++
#include <memory>
#include <iostream>
struct Foo {
Foo() { std::cout << "Foo::Foo\n"; }
~Foo() { std::cout << "Foo::~Foo\n"; }
void bar() { std::cout << "Foo::bar\n"; }
};
void f(const std::shared_ptr<Foo>& p) {
std::cout << "f: p.use_count() = " << p.use_count() << "\n";
}
int main() {
std::shared_ptr<Foo> p1 = std::make_shared<Foo>();
std::shared_ptr<Foo> p2 = p1;
std::shared_ptr<Foo> p3 = p1;
std::cout << "p1.use_count() = " << p1.use_count() << "\n";
std::cout << "p2.use_count() = " << p2.use_count() << "\n";
std::cout << "p3.use_count() = " << p3.use_count() << "\n";
f(p1);
p1->bar();
p2.reset();
p3.reset();
std::cout << "end\n";
}
```
输出结果如下:
```
Foo::Foo
p1.use_count() = 3
p2.use_count() = 3
p3.use_count() = 3
f: p.use_count() = 4
Foo::bar
Foo::~Foo
end
```
可以看到,`p1`、`p2`、`p3` 都指向同一块内存,共享计数器。在 `f` 函数中,`p` 也指向同一块内存,因此 `p.use_count()` 的值为 4。在程序结束时,由于没有任何 `shared_ptr` 指向内存,因此内存被自动释放,输出了 `Foo::~Foo`。
阅读全文