C++ 内存管理综合解析
1. 内存管理中的指针所有权问题
在动态内存分配中,大多数情况下会使用 std::unique_ptr 。不过,在某些场景下, std::unique_ptr 无法妥善代表指针的所有权。指针所有权意味着谁拥有指针,也就是谁负责分配和释放指针。通常,程序中的单个实体负责此任务,但也存在多个实体需共同负责释放指针的情况,多线程场景就是典型例子。
假设有两个线程:
- 线程 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++) {
ptr->inc();
}
std::cout << "thread2: complete\n";
}
void
thread1()
{
auto ptr = std::make_un
超级会员免费看
订阅专栏 解锁全文

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



