如何在C++中使用标准库的智能指针

使用标准库的智能指针

* 注意,在使用数组的时候需要使用数组的特化版本。

复制代码
#include <iostream>
#include <memory>

std::unique_ptr<char[]> division(int x, int y) {
    std::unique_ptr<char[]> sp(new char[100]{});
    if (y == 0) {
        throw "Please do not use 0 as a divisor";
    }
    std::sprintf(sp.get(), "%d / %d = %d\n", x, y, x / y);
    return sp;
}

int main() {
    try {
        std::unique_ptr<char[]> sp = division(6, 0);
        std::cout << sp.get() << std::endl;
    } catch (const char* e) {
        std::cerr << e << std::endl;
    }
}

互斥锁的释放

在多线程编程中,为了保护共享资源,我们通常会使用 互斥量 mutex 来进行保护。

并且在使用资源前进行上锁的 lock() 操作,在使用完毕后用 unlock() 进行解锁。

直接使用互斥量

这里假定在 2000ms 后两个线程都会结束。

复制代码
#include <iostream>
#include <thread>
#include <mutex>

int x = 0;
std::mutex mutex;

void fun() {
    for (int i = 0; i < 100000; i += 1) {
        mutex.lock();
        x += 1;
        mutex.unlock();
    }
}

int main() {
    std::thread th1(fun);
    std::thread th2(fun);
    th1.join();
    th2.join();

    std::cout << x << std::endl;
}

但是这种写法需要开始和结束处都对 mutex 整个对象进行操作。此处代码较短不容易出错,但是当代码量越来越大,各种情况越来越复杂后就很容易遗漏最后的 mutex.unlock(); 解锁操作。

此时就可以使用 RAII 的方式,在构造的时候对 mutex 进行 lock() 操作,在 unlock() 进行解锁操作。

相关推荐
晴天的雨.9921 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
IvanCodes6 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae8 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能8 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
qq_25183645710 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理11 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868712 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
+VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长12 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管