C++资源管理最佳实践(shared_ptr与weak_ptr高效配合秘籍)

第一章:C++资源管理的核心挑战

C++作为一门系统级编程语言,赋予开发者对内存和硬件资源的精细控制能力。然而,这种灵活性也带来了显著的资源管理挑战,尤其是在动态内存分配、对象生命周期管理和异常安全等方面。

手动内存管理的风险

在C++中,开发者需显式使用 new 和 delete 来分配和释放堆内存。若未能正确配对调用,极易导致内存泄漏或重复释放等问题。例如:

int* ptr = new int(42);
// 使用 ptr
delete ptr;
ptr = nullptr; // 避免悬空指针
上述代码展示了基本的内存操作,但若在 delete 前发生异常,delete 可能不会被执行,从而造成资源泄漏。

RAII原则的重要性

资源获取即初始化(RAII)是C++中解决资源管理问题的核心范式。其核心思想是将资源绑定到对象的生命周期上,利用构造函数获取资源,析构函数自动释放。
  • 对象构造时获取资源(如内存、文件句柄)
  • 对象析构时自动释放资源,无论是否发生异常
  • 结合智能指针可有效避免手动管理错误

智能指针的应用

现代C++推荐使用智能指针来自动化内存管理。常用的类型包括:
类型用途所有权语义
std::unique_ptr独占资源所有权不可复制,可移动
std::shared_ptr共享资源所有权引用计数管理
std::weak_ptr观察共享对象,避免循环引用不增加引用计数
通过合理使用这些工具,可以显著降低资源泄漏和悬空指针的风险,提升程序的健壮性和可维护性。

第二章:shared_ptr 原理与高效使用策略

2.1 shared_ptr 的引用计数机制解析

`shared_ptr` 是 C++ 智能指针中实现资源共享的核心工具,其核心机制是**引用计数(Reference Counting)**。每当一个新的 `shared_ptr` 实例指向同一块动态内存时,引用计数加一;当某个实例被销毁或重置时,计数减一;仅当计数降为零时,资源才会被自动释放。
引用计数的存储结构
`shared_ptr` 内部维护两个关键指针:一个指向管理的对象,另一个指向控制块(control block),其中包含引用计数、弱引用计数和删除器等元数据。多个 `shared_ptr` 共享同一个控制块。
std::shared_ptr<int> p1 = std::make_shared<int>(42);
std::shared_ptr<int> p2 = p1; // 引用计数从1变为2
上述代码中,`p1` 和 `p2` 共享同一对象,控制块中的引用计数为2。当 `p2` 离开作用域时,计数减至1,资源未释放。
线程安全性
引用计数的增减操作是原子的,保证了多线程环境下 `shared_ptr` 的拷贝和析构安全,但**不保证所指对象的线程安全**。
  • 引用计数操作是原子的,线程安全
  • 多个线程同时修改共享对象需额外同步机制

2.2 正确初始化 shared_ptr 的多种方式

在 C++ 中,`std::shared_ptr` 提供了对动态分配对象的安全内存管理。正确初始化 `shared_ptr` 是避免资源泄漏和未定义行为的关键。
使用 make_shared 初始化
最推荐的方式是通过 `std::make_shared`,它不仅性能更优,还能保证异常安全。
auto ptr = std::make_shared<int>(42);
该方式在一个内存块中同时分配控制块和对象,减少内存开销。
使用裸指针构造(需谨慎)
虽然可以使用裸指针直接构造 `shared_ptr`,但容易引发问题:
int* raw = new int(10);
auto ptr = std::shared_ptr<int>(raw); // 危险:若提前 delete raw 将导致重复释放
参数说明:构造函数接受原始指针,由 `shared_ptr` 接管其生命周期管理。
初始化方式对比
方式安全性性能
make_shared高优
裸指针构造低一般

2.3 避免 shared_ptr 的循环引用陷阱

在使用 std::shared_ptr 管理对象生命周期时,若两个或多个对象通过 shared_ptr 相互持有强引用,将导致引用计数无法归零,从而引发内存泄漏。
循环引用示例

struct Node {
    std::shared_ptr<Node> parent;
    std::shared_ptr<Node> child;
};

auto a = std::make_shared<Node>();
auto b = std::make_shared<Node>();
a->child = b;
b->parent = a; // 循环引用形成,引用计数永不为0
上述代码中,a 和 b 互相持有 shared_ptr,析构时引用计数仍大于0,资源无法释放。
解决方案:使用 weak_ptr
  • std::weak_ptr 不增加引用计数,仅观察对象是否存在;
  • 适用于“父-子”或“观察者-被观察者”等非对称关系;
  • 打破循环的关键是将双向强引用改为单向强引用 + 单向弱引用。

2.4 shared_ptr 与异常安全的内存管理

在现代C++开发中,`shared_ptr` 是实现异常安全内存管理的核心工具之一。它通过引用计数机制自动管理动态分配对象的生命周期,确保在异常抛出时仍能正确释放资源。
基本用法与异常安全保证

#include <memory>
#include <iostream>

void risky_operation() {
    auto ptr = std::make_shared<int>(42);
    std::cout << *ptr << std::endl;
    throw std::runtime_error("error occurred");
} // ptr 超出作用域,自动析构,无内存泄漏
上述代码中,即使发生异常,`shared_ptr` 也会在栈展开时自动销毁并释放内存,避免了传统裸指针在异常路径下的资源泄漏问题。
优势总结
  • 异常安全:构造和析构过程遵循RAII原则
  • 共享所有权:多个 shared_ptr 可安全共享同一对象
  • 线程安全:控制块的引用计数是原子操作

2.5 性能考量:shared_ptr 的开销与优化建议

内存与性能开销来源

shared_ptr 的主要开销来自控制块的动态分配和原子操作。每个 shared_ptr 实例共享一个控制块,其中包含引用计数、弱引用计数和删除器。多线程环境下,引用计数的增减需原子操作,带来显著性能损耗。

避免不必要的拷贝
  • 频繁拷贝 shared_ptr 会触发原子加减,影响性能;
  • 建议在函数传参时使用 const 引用:const std::shared_ptr<T>&;
  • 优先使用 make_shared<T>() 一次性分配对象与控制块,减少内存碎片。
auto ptr = std::make_shared<MyObject>(arg1, arg2);
// 相比 new + shared_ptr 构造,make_shared 减少一次内存分配

上述代码利用 make_shared 合并对象与控制块的内存分配,提升缓存局部性并降低开销。

替代方案评估
智能指针类型适用场景性能特点
shared_ptr多所有者共享高开销,线程安全
unique_ptr独占所有权零运行时开销
weak_ptr打破循环引用仅访问,不增引用计数

第三章:weak_ptr 破解循环引用的关键作用

3.1 weak_ptr 的基本用法与生命周期观察

weak_ptr 的作用与创建
`std::weak_ptr` 是 C++ 中用于解决 `std::shared_ptr` 循环引用问题的智能指针。它不增加对象的引用计数,仅观察由 `shared_ptr` 管理的对象生命周期。

std::shared_ptr<int> sp = std::make_shared<int>(42);
std::weak_ptr<int> wp = sp; // 创建 weak_ptr,不增加引用计数
上述代码中,`wp` 观察 `sp` 所管理的对象,但不会延长其生命周期。
检查对象是否存活
通过 `lock()` 方法可安全获取当前对象的 `shared_ptr`,若对象已销毁,则返回空 `shared_ptr`。

if (auto locked = wp.lock()) {
    std::cout << *locked << std::endl; // 对象仍存在
} else {
    std::cout << "对象已被释放" << std::endl;
}
`lock()` 返回一个 `shared_ptr`,确保在使用期间对象不会被销毁,是线程安全的检查机制。

3.2 使用 weak_ptr 打破 shared_ptr 循环引用

在 C++ 智能指针的使用中,`shared_ptr` 虽能自动管理对象生命周期,但容易因相互持有导致循环引用,从而引发内存泄漏。
循环引用问题示例
#include <memory>
struct Node {
    std::shared_ptr<Node> parent;
    std::shared_ptr<Node> child;
};
// 创建父子节点会形成循环引用,引用计数无法归零
上述代码中,`parent` 和 `child` 互相持有 `shared_ptr`,析构时引用计数不为零,资源无法释放。
weak_ptr 的解决方案
`weak_ptr` 是一种弱引用指针,不增加引用计数,可用于观察 `shared_ptr` 管理的对象。将双向关系中的一方改为 `weak_ptr` 可打破循环。
struct Node {
    std::weak_ptr<Node> parent; // 使用 weak_ptr 避免循环
    std::shared_ptr<Node> child;
};
此时,`parent` 不影响对象生命周期,仅通过 `lock()` 方法临时获取 `shared_ptr`,确保安全访问。
指针类型是否增加引用计数能否单独管理生命周期
shared_ptr是能
weak_ptr否不能

3.3 weak_ptr 在缓存和监听器模式中的实践应用

在缓存系统中,对象常被多个组件共享,但需避免因强引用导致内存泄漏。`weak_ptr` 提供了一种非拥有性访问机制,适合用于观察或缓存场景。
缓存中的弱引用管理
使用 `weak_ptr` 存储缓存对象,可确保当所有强引用释放后,对象能被正确销毁:

std::unordered_map<int, std::weak_ptr<Data>> cache;
std::shared_ptr<Data> getData(int id) {
    if (cache.find(id) != cache.end()) {
        auto ptr = cache[id].lock(); // 尝试提升为 shared_ptr
        if (ptr) return ptr;
    }
    auto newData = std::make_shared<Data>(id);
    cache[id] = newData;
    return newData;
}
`lock()` 方法安全地将 `weak_ptr` 转换为 `shared_ptr`,若原对象已销毁,则返回空指针,避免悬垂引用。
监听器模式中的生命周期解耦
在事件系统中,监听器常以 `weak_ptr` 注册,通知时尝试提升调用,防止已销毁对象被误触发,实现自动清理机制。

第四章:shared_ptr 与 weak_ptr 协同设计模式

4.1 观察者模式中智能指针的安全实现

在C++实现观察者模式时,对象生命周期管理是关键挑战。使用原始指针易导致悬空引用,而智能指针能有效避免此类问题。
智能指针的选择与应用
推荐使用 std::shared_ptr 管理被观察者,观察者则以 std::weak_ptr 注册,防止循环引用:

class Observer;
class Subject {
    std::vector> observers;
public:
    void attach(std::shared_ptr obs) {
        observers.push_back(obs);
    }
    void notify() {
        observers.erase(
            std::remove_if(observers.begin(), observers.end(),
                [](const std::weak_ptr& wp) {
                    auto sp = wp.lock();
                    if (sp) sp->update();
                    return !sp;
                }),
            observers.end()
        );
    }
};
该实现中,weak_ptr 不增加引用计数,通过 lock() 安全获取临时 shared_ptr,确保观察者销毁后自动清理注册项。
线程安全考虑
多线程环境下,需对观察者列表加锁,避免迭代时发生竞争。结合互斥量可保障数据一致性。

4.2 缓存系统中 weak_ptr 的资源弱引用管理

在缓存系统中,频繁的资源共享容易引发内存泄漏或悬空指针问题。`weak_ptr` 作为 `shared_ptr` 的弱引用伴侣,提供了一种非拥有性引用机制,避免循环引用导致的资源无法释放。
weak_ptr 的典型应用场景
当缓存对象被多个组件观察但不持有时,使用 `weak_ptr` 可安全访问资源而不影响生命周期管理。

std::shared_ptr<Data> data = std::make_shared<Data>("cached_value");
std::weak_ptr<Data> observer = data;

if (auto locked = observer.lock()) {
    // 安全访问:资源仍存在
    std::cout << locked->value;
} else {
    // 资源已被释放
    std::cout << "Resource expired";
}
上述代码中,`lock()` 方法尝试获取 `shared_ptr`,确保访问时资源有效。若原对象已销毁,返回空指针,避免非法访问。
资源管理优势对比
智能指针类型所有权影响生命周期适用场景
shared_ptr共享是资源持有者
weak_ptr无否缓存、观察者

4.3 定时器与异步任务中的生命周期控制

在现代应用开发中,定时器和异步任务常用于轮询、超时控制或后台数据同步。若未妥善管理其生命周期,容易引发内存泄漏或状态不一致。
资源释放的关键时机
组件销毁或用户导航离开时,必须主动取消仍在运行的定时任务。例如,在 JavaScript 中使用 setInterval 时,应保存返回的句柄并调用 clearInterval 清理:

const intervalId = setInterval(() => {
  console.log('执行周期任务');
}, 1000);

// 组件卸载时清理
clearInterval(intervalId);
上述代码中,intervalId 是定时器的唯一标识,必须保留以便后续清除。否则,回调将持续执行,即使所属上下文已失效。
异步任务与挂起操作的协同管理
  • 使用 AbortController 控制 fetch 请求生命周期
  • 结合 Promise.race 实现超时机制
  • 在 React useEffect 或 Vue onUnmounted 中统一清理

4.4 构建事件总线:shared_ptr 与 weak_ptr 的协同架构

在现代C++事件驱动系统中,构建高效的事件总线依赖于智能指针的精准管理。`shared_ptr` 负责对象生命周期的共享控制,确保事件处理器在被订阅期间持续有效;而 `weak_ptr` 则用于打破循环引用,避免内存泄漏。
事件订阅机制设计
使用 `weak_ptr` 存储观察者,可安全检测对象是否存活,避免悬挂指针:

class EventHandler {
public:
    virtual void onEvent() = 0;
};

class EventBus {
    std::vector> observers;
    
public:
    void subscribe(std::shared_ptr handler) {
        observers.push_back(handler);
    }
    
    void notify() {
        observers.erase(
            std::remove_if(observers.begin(), observers.end(),
                [](const std::weak_ptr& wp) {
                    auto sp = wp.lock();
                    if (sp) sp->onEvent();
                    return !sp;
                }),
            observers.end()
        );
    }
};
上述代码中,`subscribe` 接受 `shared_ptr` 延长对象生命周期,`notify` 通过 `lock()` 获取临时 `shared_ptr`,确保调用期间对象不被销毁。
资源管理优势对比
指针类型所有权适用场景
shared_ptr共享事件发布者持有处理器
weak_ptr观察事件总线存储订阅者

第五章:现代C++资源管理的演进与总结

智能指针的实际应用
现代C++通过智能指针实现了自动内存管理,极大降低了资源泄漏风险。`std::unique_ptr` 和 `std::shared_ptr` 是最常用的两种类型。前者适用于独占所有权场景,后者适用于共享所有权。

#include <memory>
#include <iostream>

struct Resource {
    Resource() { std::cout << "Resource acquired\n"; }
    ~Resource() { std::cout << "Resource released\n"; }
};

void useResource() {
    auto ptr = std::make_unique<Resource>(); // 自动释放
}
RAII与异常安全
RAII(Resource Acquisition Is Initialization)是C++资源管理的核心机制。对象构造时获取资源,析构时自动释放,确保异常发生时仍能正确清理。
  • 文件句柄可通过 `std::ifstream` 自动关闭
  • 互斥锁推荐使用 `std::lock_guard` 防止死锁
  • 自定义资源可封装析构函数实现自动回收
移动语义优化资源传递
C++11引入的移动语义避免了不必要的深拷贝。例如,返回大对象时使用移动构造:

std::vector<int> createLargeVector() {
    std::vector<int> data(1000000);
    return data; // 调用移动构造,非拷贝
}
技术引入版本典型用途
auto_ptrC++98已弃用,不支持移动语义
unique_ptrC++11独占资源管理
shared_ptrC++11引用计数共享资源
资源生命周期流程图:
构造 → 获取资源 → 使用中 → 异常或正常退出 → 析构 → 释放资源
海思MIPI屏调试实战:从参数计算到点亮屏幕的完整指南 本文提供了一份海思平台MIPI屏幕调试的完整实战指南。文章以Hi3516DV300调试800x1280分辨率屏幕为例,详细讲解了从参数计算、配置文件修改到最终点亮屏幕的全流程,并分享了常见问题排查与进阶优化技巧,旨在帮助嵌入式开发者高效解决MIPI屏调试难题。 阅读详情

相关推荐

工业相机TEC散热技术:从原理到高精度成像的实战解析

本文深入解析了工业相机TEC散热技术的核心原理与实战应用。通过阐述热电制冷器如何利用帕尔帖效应实现精准温控,有效抑制图像传感器暗电流噪声,从而保障高精度成像的稳定性。文章结合工业场景痛点,提供了从TEC选型、系统集成到控制逻辑的完整设计指南,并分享了不同应用场景下的实战案例,是提升工业视觉系统成像质量的关键技术解析。

weixin_29269441的博客 413

C++11 智能指针:unique_ptr、shared_ptr和weak_ptr 功能特性 模拟实现

C++11 中的智能指针,unique_ptr、shared_ptr和weak_ptr的功能特性、使用场景、辅助函数及模拟实现。

有耐心做好简单事情,坚持写blog 1878

V-rep机器人仿真(Win10):UR5+RG2+Kinect+YOLOV3+DDPG+Pytorch(第四部分:YOLOV3图像识别)

这是一个V-rep机器人仿真实验,较为简单,适合初学者在入门图像识别、机器学习、机器人学的内容时进行学习与训练。 实验涉及的内容有:V-rep机器人仿真,YOLOV3图像识别,强化学习DDPG,UR5机械臂及RG2机械手,Kinect摄像头。 使用环境:Win10,Pytorch0.4,V-rep 整个实验一共由多篇文章组成,本文是第四部分。 第四部分:YOLOV3图像识别 文章目录第四部分:YO...

weixin_42158966的博客 5837

24.【C++进阶】智能指针(RAII思想、shared_ptr、unique_ptr、weak_ptr、auto_ptr)

本文介绍了C++智能指针的设计原理与使用方法。首先通过内存泄漏案例展示了智能指针的实用价值,分析了RAII思想在资源管理中的重要性。随后详细讲解了四种标准智能指针:auto_ptr(已弃用)、unique_ptr(独占所有权)、shared_ptr(共享所有权)和weak_ptr(解决循环引用问题),包括其拷贝语义、删除器定制等特性。文章深入剖析了智能指针的底层实现,特别是shared_ptr的引用计数机制,并演示了如何用weak_ptr解决循环引用问题。最后讨论了智能指针的线程安全性和内存泄漏相关问题。

恢弘志士之气,不宜妄自菲薄 787

地图可视化类型大全

地图可视化类型大全: 散点地图 网格地图 聚合地图 气泡地图 热力图 Choropleth地图/分级设色地图/分级区域地图/着色地图/分级统计地图(百度百科这样翻译)/等值域地图/分段设色地图 Cartogram地图/变形地图/示意地图 规则形状地图 /RecMap/Demers Cartogram/瓷砖网格地图/DorlingMap 流型图(Flow Map)\流线图\流向图\轨迹地图 复合地图

codeuniverse的博客 3532

Go语言集成Ollama本地大模型:gollama库实战指南

在当今的AI应用开发中,大型语言模型(LLM)的集成已成为关键技术。其核心原理是通过API调用,将自然语言处理能力嵌入到各类应用中。从技术价值看,本地化部署的LLM解决了数据隐私、网络延迟和持续成本三大痛点,尤其适合处理敏感数据或对实时性要求高的场景。在工程实践中,开发者常使用专门的客户端库来简化与模型服务的交互,例如通过封装REST API、提供类型安全接口和流式处理支持,从而提升开发效率和代码健壮性。具体到Go语言生态,结合Ollama这一流行的本地大模型运行工具,可以实现完全离线、低延迟的AI功能集成

weixin_28728443的博客 605

C++11智能指针之shared_ptr、weak_ptr

1. shared_ptr、weak_ptr概念 shared_ptr与weak_ptr智能指针均是C++ RAII的一种应用,可用于动态资源管理shared_ptr基于“引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护了一个共享的引用计数器,记录了引用同一对象的shared_ptr实例。当最后一个指向动态对象的shared_ptr销毁时,会自动销毁其所指对象(通过d

4415

关于示波器测485串口波特率的使用方法总结

之前没有用过示波器,更不知道怎么来测试串口的波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有问题的,用客户的设备接收就有问题。 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送

lianxue1986的专栏 3万+

weak_ptr一个配合shared_ptr的智能指针

一、产生原因weak_ptr的产生,主要是为了配合shared_ptr的使用,对于shared_ptr来说,有一种循环引用会导致shared_ptr的引用计数一直不能变为0,如此以来导致...

zhghost的专栏 508

android广告SDK原理详解(附源码)

广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这

rmcgogo的博客 1万+

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7352

weak_ptr 智能指针

是 C++11 标准引入的一个智能指针,用来管理共享资源,它与配合使用,能够避免 循环引用 和内存泄漏问题。是一个弱引用,它不会增加引用计数,从而不会阻止对象被销毁。

乐褀的博客 1184

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1451

C++ 智能指针核心特性与 weak_ptr 关键问题解析

C++ 智能指针是基于RAII(资源获取即初始化)原则设计的内存管理工具,核心目标是替代原生指针管理动态内存,自动释放资源,避免内存泄漏、重复释放、悬空指针等手动内存管理错误。因设计缺陷被废弃,不推荐使用)。智能指针的核心价值是RAII 自动内存管理,不同类型适配 “独占 / 共享 / 观察” 三种资源管理场景;weak_ptr无法安全直接判断共享计数是否为 0,需通过expired()lock()间接判断对象是否销毁;shared_ptr。

C语言实战大全 912

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++智能指针选型难题:shared_ptr、unique_ptr、weak_ptr到底怎么用?

掌握C++智能指针在大型项目中的内存管理策略,有效避免内存泄漏与循环引用。解析shared_ptr、unique_ptr、weak_ptr的适用场景与核心使用方法,提升代码安全与性能。合理选型,让资源管理更高效,值得收藏。

PixelStream的博客 967

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++资源管理进阶之路(从unique_ptr到shared_ptr的完美过渡)

掌握c++智能指针unique_ptr转换shared_ptr的正确方法,解决资源管理中的所有权转移难题。适用于需从独占转为共享的场景,详解move语义与make_shared技巧,提升代码安全与性能,值得收藏。

SimProceed的博客 570

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

一文掌握C++智能指针(unique_ptr、shared_ptr、weak_ptr)附简单实现代码

C++智能指针(unique_ptr、shared_ptr、weak_ptr)附代码实现

qq_42838399的博客 1408

揭秘C++资源管理难题:如何用shared_ptr和unique_ptr彻底避免内存泄漏

掌握C++资源管理难题的破解之道,通过unique_ptr和shared_ptr合理管理内存。详解智能指针适用场景、所有权设计与避免循环引用等最佳实践,彻底杜绝内存泄漏。提升代码安全与性能,值得收藏。

AlgoInk的博客 800

【14】智能指针shared_ptr和weak_ptr的关系

【1】原理及相关概念 (1) 强引用与弱引用 1)强引用:指针对对象存在拥有性,与对象具有相同的生命周期,指向的对象被注销了,该指针才被释放;一个强引用当被引用的对象活着的话,这个引用也存在(就是说,当至少有一个强引用,那么这个对象就不能被释放) 2)弱引用:指针对对象存在非拥有性,对象的生命周期与指针不同,不控制对象生命周期的智能指针,程序结束时自动被释放。弱引用当引用的对象活着的时候不一定存在...

qq_33612665的博客 878

从入门到精通:掌握shared_ptr和weak_ptr的4个核心应用场景

掌握C++ shared_ptr 的 weak_ptr 使用,有效解决循环引用与资源管理难题。详解4大应用场景、核心使用方法及性能优势,提升内存安全与程序效率。实用技巧值得收藏。

InitFlow的博客 722

C++11 智能指针 unique_ptr shared_ptr weak_ptr

智能指针 智能指针是基于RAII机制实现的类(模板),具有指针的行为(重载了operator*与operator->操作符),可以“智能”地销毁其所指对象。C++11中有unique_ptr、shared_ptr与weak_ptr等智能指针,可以对动态资源进行管理。智能指针是类而不是指针 shared_ptr shared_ptr是一种引用计数指针,没有任何其它的shared_ptr

extend_die的专栏 1581

为什么顶级C++工程师都在用shared_ptr?真相令人震惊

掌握C++ RAII的智能指针应用,轻松解决内存管理难题。shared_ptr通过引用计数实现自动资源回收,广泛应用于对象共享、多线程环境与复杂生命周期管理,提升代码安全与效率。深入解析其原理与最佳实践,值得收藏。

FuncTide的博客 1013

C++——智能指针 weak_ptr

weak_ptr配合shared_ptr解决循环引用问题

曾几何时的博客 722

用weak_ptr解决shared_ptr的环形引用问题

shared_ptrshared_ptr是C++11增加的智能指针,它的内部有一个引用计数的功能,能够允许多个智能指针指向同一个对象,每当多一个指针指向改对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指向对象时,引用计数会减1,当计数为0的时候会自动的释放资源。 不过使用它要避免一个环形引用的问题,看如下代码:#include <iostream> #include <m

唐唐唐唐人的博客 5833

【C++智能指针最佳实践】:90%开发者忽略的unique_ptr与shared_ptr核心陷阱

掌握C++智能指针(unique_ptr/shared_ptr)最佳实践,有效避免内存泄漏与资源竞争。详解适用场景、所有权管理与性能优化技巧,提升代码安全与效率。核心陷阱深度解析,值得收藏。

PixelShoal的博客 898

C++智能指针进阶之路(从shared_ptr到weak_ptr的必经之旅)

掌握shared_ptr的循环引用难题?本文深入解析shared_ptr的weak_ptr使用技巧,介绍如何通过weak_ptr打破循环、管理临时对象及实现观察者模式。涵盖典型应用场景与代码示例,提升资源管理效率,值得收藏。

LogicWander的博客 378
上一篇: forward_list insert_after完全指南,从入门到精通的链表操作核心技巧
下一篇: 【C++20实战进阶】:避免作用域污染,正确使用范围for初始化的3种方式
SimCompile
博客等级 码龄1年 140粉丝 2012原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值