1、share_ptr
unique_ptr
weak_ptr
2、C++ 智能指针是用来自动管理内存资源,避免内存泄露,自动申请和释放资源的对象;
3、推荐优先使用 unique_ptr,共享才用 shared_ptr,循环引用时配合 weak_ptr。
unique_ptr:独占资源,资源只能被一个对象拥有;
share_ptr:共享资源,资源可以被多个对象用有,多个对象间用引用计数记录,释放资源,先减引用计数;
weak_ptr:循环引用时,配合循环引用使用
4、std::unique_ptr p1 = std::make_unique<int>(10); std::unique_ptr p2= std::move(p1); //只能移动 不能复制
5、std::share_ptr p1 = make_share(42);
std::share_ptr p1 = p1;
weak_ptr 是什么?
weak_ptr 是一个不参与引用计数的智能指针。
它只是观察(weakly reference)一个 shared_ptr 管理的对象,不会增加引用计数。
weak_ptr 不能直接访问对象,需要通过 lock() 转成 shared_ptr。
由
struct A {
std::shared_ptr<B> b;
};
struct B {
std::shared_ptr<A> a;
};
会引起循环引用 导致引用计数不能降为0 最终无法析构
改成
struct A {
std::shared_ptr<B> b;
};
struct B {
std::weak_ptr<A> a; // 这里改为 weak_ptr
};
则weak_ptr不影响析构 不增加引用技术
他的使用
std::weak_ptr<A> weak_a = ...;
if (auto shared_a = weak_a.lock()) {
// shared_a 是一个 shared_ptr<A>
shared_a->doSomething(); // ✅ 可以安全访问
} else {
// 对象已经被销毁,无法访问
}
智能指针的原理
智能指针是一个类模板,含构造函数和析构函数,share_ptr还包含引用计数 是在堆内分配内存
make_ptr让其只需分配一次内存,在堆内
777



被折叠的 条评论
为什么被折叠?



