18、C++ 智能指针与内存映射:std::shared_ptr 与 mmap 的深度解析

C++ 智能指针与内存映射:std::shared_ptr 与 mmap 的深度解析

1. 智能指针概述

在 C++ 中,动态内存分配是一项常见且重要的操作。大多数情况下, std::unique_ptr 是分配动态内存的首选。它确保了指针所有权的唯一性,即一个指针只能被一个实体拥有和管理。然而,在某些场景下, std::unique_ptr 无法很好地表示指针所有权。指针所有权指的是谁负责分配和释放指针。通常,程序中的单个实体负责此任务,但有些情况下,多个实体需要共同承担释放指针的责任。

2. 多线程场景下的指针所有权问题

多线程是一个典型的场景,多个实体需要共享指针所有权。例如,有两个线程:
- 线程 1 创建一个指针并拥有它。
- 线程 2 使用线程 1 创建的指针。

以下是示例代码:

#include <thread>
#include <iostream>
class myclass
{
    int m_data{0};
public:
    ~myclass()
    {
        std::cout << "myclass deleted\n";
    }
    void inc()
    { m_data++; }
};
std::thread t1;
std::thread t2;
void
thread2(myclass *ptr)
{
    for (auto i = 0; i < 100000; i++) {
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值