shared_ptr浅谈
简介
- 管理一个指针的存储,提供一个有限的垃圾收集工具,可能与其他对象共享该管理。
- shared_ptr类型的对象具有获取指针的所有权并共享所有权的能力:一旦他们拥有了所有权,当他们的最后一个成员释放所有权时,一个指针的所有者会对它的删除负责。
- shared_ptr类型的对象具有获取指针的所有权并共享所有权的能力:一旦他们拥有了所有权,当他们的最后一个成员释放所有权时,一个指针的所有者会对它的删除负责。
- shared_ptr对象一旦自己被销毁,就会释放他们共同拥有的对象的所有权,或者一旦它们的值通过赋值操作或对shared_ptr的显式调用进行更改,即:重置。一旦所有共享所有权的shared_ptr对象都释放了这个所有权,托管对象就会被删除(通常是通过调用::delete,但是在构造上可能会指定一个不同的删除器)。
- 用法
header 1 |
header 2 |
default (1) |
constexpr shared_ptr() noexcept; |
from null pointer (2) |
constexpr shared_ptr(nullptr_t) : shared_ptr() {} |
from pointer (3) |
template explicit shared_ptr (U* p); |
with deleter (4) |
template shared_ptr (U* p, D del);template shared_ptr (nullptr_t p, D del); |
with allocator (5) |
template shared_ptr (U* p, D del, Alloc alloc);template shared_ptr (nullptr_t p, D del, Alloc alloc); |
copy (6) |
shared_ptr (const shared_ptr& x) noexcept;template shared_ptr (const shared_ptr& x) noexcept; |
copy from weak (7) |
template explicit shared_ptr (const weak_ptr& x); |
move (8) |
shared_ptr (shared_ptr&& x) noexcept;template shared_ptr (shared_ptr&& x) noexcept; |
move from managed (9) |
template shared_ptr (auto_ptr&& x);template shared_ptr (unique_ptr |
#include <iostream>
#include <memory>
struct C {
int* data;};
int main () {
std::shared_ptr<int> p1;
std::shared_ptr<int> p2 (nullptr);
std::shared_ptr<int> p3 (new int);
std::shared_ptr<