首页 > 商业 > > 内容页

智能指针_今日快看

发表于: 2023-07-05 22:49:00 来源:哔哩哔哩

智能指针(Smart Pointers)是一种用于管理动态分配的内存的对象。它们可以自动处理资源的释放,从而减少内存泄漏的风险。最常见的智能指针类型有std::unique_ptrstd::shared_ptr

std::unique_ptr

unique_ptr是一种独占所有权的智能指针。一个unique_ptr是唯一指向一块内存的所有者,当unique_ptr超出作用域或被显式地释放时,内存会被自动释放。


(相关资料图)

Case

std::shared_ptr

shared_ptr是一种共享所有权的智能指针。多个shared_ptr可以指向同一块内存,并且会跟踪有多少个指针指向该内存(引用计数)。只有当最后一个指向该内存的shared_ptr被销毁时,内存才会被释放。

Case

如果使用new关键字来创建shared_ptr,会导致更大的内存开销。因为new关键字分配了两个独立的内存块,一个用于存储对象,另一个用于存储引用计数(即shared_ptr的数量),而且在释放内存的时候也要分别释放两块内存。而make_shared函数将对象和引用计数存储在同一块内存中,避免了额外的内存分配。

但是shared_ptr有一个潜在的问题——循环引用。循环引用指的是两个或多个对象相互持有对方的shared_ptr,导致它们的引用计数永远不会变为零,从而无法释放内存。

Case:

std::weak_ptr

std::weak_ptr也是一种智能指针,用于解决shared_ptr可能出现的循环引用问题。 weak_ptr允许创建一个指向shared_ptr所管理对象的非拥有引用。weak_ptr是一种弱引用,它允许观察由shared_ptr管理的对象,而不会增加引用计数。换句话说,weak_ptr不会影响对象的生命周期。

weak_ptr的创建只能通过shared_ptr的赋值来实现。可以使用weak_ptr的成员函数lock来获得指向所管理对象的shared_ptr强引用,它返回一个有效的shared_ptr,如果对象已被销毁,则返回空的shared_ptr

weak_ptr还提供了一个成员函数expired,用于检查弱引用指向的对象是否已经被销毁。如果对象已销毁,则返回true,否则返回false

标签:
x 广告
x

Copyright ©  2015-2022 今日上海网版权所有  备案号:京ICP备2022022245号-14   联系邮箱:435 226 40@qq.com