lock():尝试获取一个指向对象的shared_ptr,如果对象仍然有效,则返回非空shared_ptr,否则返回空shared_ptr。 基本用法 //1 创建 int main() { // 创建一个 shared_ptr 并指向新建的 MyClass 对象 std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); // 访问对象的方法 std::cout << ...
因为weak_ptr是弱指针,所以不能直接访问,但是可以通过weak_ptr::lock间接访问。 weak_ptr::lock weak_ptr::lock返回构造weak_ptr的shared_ptr,当shared_ptr已经被释放时,返回的是空shared_ptr;注意,因为weak_ptr::lock返回了shared_ptr,而shared_ptr会增加引用计数,进而影响内部数据指针的释放,这也是lock的含义所...
C++语法基本功:类继承、构造、析构与unique_ptr, 视频播放量 6422、弹幕量 1、点赞数 132、投硬币枚数 33、收藏人数 366、转发人数 9, 视频作者 南瓜之运, 作者简介 命运无常,南瓜好吃。,相关视频:35.C++多线程:unique_lock的用法,一个很变态,但可以让你快速学会C++
unique_lock<T>能够在需要是lock,用完后unlock,当生命周期结束时若此时互斥量没有解锁,也会像lock_guard<T>一样析构解锁。也就是说类unique_lock<T>是类lock_guard<T>的一个超集。unique_lock<T>相比lock_guard<T>更加灵活,但是效率差一些,因为占用更多的内存。以下是cppreference.com对unique_lock<T>的说明...
用lock()函数把它可以提升为shared_ptr,如果对象还活着,返回有效的shared_ptr, 如果对象已经死了,提升会失败,返回一个空的shared_ptr。 提升的行为(lock())是线程安全的 */classBB;classCC{public:std::string m_name;CC(){std::cout<<m_name<<"调用构造函数CC()。\n";}CC(conststd::string&name):...
uniqie_lock 是个类模板,它的功能跟 lock_quard 类似,但比 lock_quard 更灵活。在工作中,一般用 lock_quard (推荐使用)就足够了,但在一些特殊的场景下会用到 uniqie_lock。 在上篇文章中讲到了 lock_quard 取代了 mutex 的 lock() 和 unlock(),在 lock_quard 的构造函数中上锁,在析构函数中解锁,这点...
std::shared_ptr<Monster> s_monster1 = r_monster1.lock();//OK!可以通过weak_ptr的lock方法获得shared_ptr。 } auto_ptr尽量不要用! 1.unique_ptr unique_ptr 由 C++11 引入,旨在替代不安全的 auto_ptr。unique_ptr 是一种定义在头文件<memory>中的智能指针。它持有对对象的独有权——两个unique_ptr...
std::make_unique 是 C++11 标准库中的一个实用函数,它是 C++14 标准中引入的,用于创建一个 std::unique_ptr 智能指针,并将其指向一个新分配的对象。使用 std::make_unique 比直接使用 new 表达式更为安全,因为它可以防止资源泄漏,并提供异常安全保证。 std::unique_ptr 是一个模板类,它提供了对动态分配对...
unique_lock和unique_ptr有点像:它可以是空的(不持有锁),可以move但不可以copy,可以用release放弃...
通过shared_ptr 创建:通常,我们使用 shared_ptr 来初始化 weak_ptr。这样可以确保 weak_ptr 观察的对象仍然存在。 使用lock() 获取 shared_ptr:要操作 weak_ptr 所观察的对象,可以使用 lock() 函数获取一个有效的 shared_ptr。如果原始的 shared_ptr 已经被释放,lock() 返回一个空的 shared_ptr。