#include <iostream> #include <memory> int main() { auto shared = std::make_shared<int>(), shared2 = shared, shared3 = shared2; auto weak = std::weak_ptr<int>{shared}; std::cout << std::boolalpha << "shared.use_count(): " << shared.use_count() << '\n' << "weak.use...
sp 是一个 std::shared_ptr,它管理一个 Example 对象。 wp 是一个 std::weak_ptr,观察 sp 管理的对象,但不增加引用计数。 使用wp.lock() 尝试将 std::weak_ptr 转换为 std::shared_ptr,如果对象仍然存在,lock() 方法返回一个有效的 std::shared_ptr;否则返回一个空的 std::shared_ptr。 防止循环引...
weak_ptr.reset() 将 weak_ptr 置空 #include <cstdio>#include<iostream>#include<memory>usingnamespacestd;structChild; typedef std::weak_ptr<Child>STChildWeakPtr;structFather :publicstd::enable_shared_from_this<Father>{stringsay; STChildWeakPtr ChildWeakPtr; }; typedef std::weak_ptr<Father>S...
甚至于,我们可以将 weak_ptr 类型指针视为shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_ptr 指针、shared_ptr 指针指向的堆内存是否已经被释放等等。 此外,当 weak_ptr 类型指针的指向和某一 shared_ptr 指针相同时,weak_ptr 指...
C++指针指针---share_ptr和weak_ptr 智能指针简介 为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。在现代 c + + 编程中,标准库包含智能指针,这些指针用于帮助确保程序不会出现内存和资源泄漏,并具有异常安全。C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用...
std::weak_ptr::expired std::weak_ptr::lock std::weak_ptr::owner_before std::weak_ptr::reset std::weak_ptr::swap std::weak_ptr::use_count std::weak_ptr::weak_ptr std::_Exit Type support Utility library Variadic functions va_arg va_copy va_end va_start Clojure 1.8 Codeigniter 3 ...
sharedPtr1.reset(); // 引用计数减1,对象销毁 return 0; } 3. std::weak_ptr std::weak_ptr是一种不控制对象生命周期的智能指针,它用来观察std::shared_ptr管理的对象,避免循环引用导致内存泄漏。 int main() { std::shared_ptr<MyClass> sharedPtr(new MyClass()); ...
std::weak_ptr是 C++ 标准库中的一种智能指针,它设计用来解决std::shared_ptr智能指针可能造成的循环引用问题。std::weak_ptr持有对对象的非拥有(弱)引用,这意味着它不会增加对象的引用计数,而且不会影响对象的生命周期。 这里对std::weak_ptr做个笔记梳理,如下图展示当我们创建一个智能指针std::shared_ptr或...
std::weak_ptr并不是一种独立的智能指针,而是std::shared_ptr的一种扩充。 std::weak_ptr一般是由std::shared_ptr创建的,之后两者就指涉到相同的控制块,但std::weak_ptr并不会影响所指涉对象的引用计数。 二、使用场景 1. 带缓存功能的工厂函数 ...
std::weak_ptr 可以从一个 std::shared_ptr 或另一个 std::weak_ptr 创建。它持有一个指向 std::shared_ptr 控制块的指针,但不增加对象的引用计数。当所有的 std::shared_ptr 都被销毁时,对象也会被销毁,此时 std::weak_ptr 会变为空(expired)。