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++) {
超级会员免费看
订阅专栏 解锁全文
4387

被折叠的 条评论
为什么被折叠?



