map+shared_ptr原理
时间: 2024-01-10 07:04:29 浏览: 43
shared_ptr 是 C++11 引入的智能指针,用于管理动态分配的内存。它和原始指针相比,可以自动释放内存并防止内存泄漏。map 是 C++ STL 提供的关联容器,用于存储键值对。
在使用 map 存储 shared_ptr 时,可以通过以下步骤实现:
1. 创建一个 map 对象,指定键的类型和值的类型。例如:`std::map<int, std::shared_ptr<MyClass>> myMap;`。
2. 通过 make_shared 或 new 关键字创建一个 shared_ptr 对象。
3. 将 shared_ptr 对象作为值插入到 map 中,同时指定对应的键。例如:`myMap = std::make_shared<MyClass>();`。
4. 可以通过键访问 map 中的值,并使用 shared_ptr 进行操作。例如:`myMap->doSomething();`。
map 的键是唯一的,如果插入重复的键,会覆盖旧值。当 map 对象不再需要时,会自动释放内存。
相关问题
map存放shared_ptr
可以使用`std::map`存放`std::shared_ptr`的方式如下:
```cpp
#include <iostream>
#include <map>
#include <memory>
int main() {
std::map<int, std::shared_ptr<int>> map;
// 向map中添加shared_ptr
map[1] = std::make_shared<int>(10);
map[2] = std::make_shared<int>(20);
map[3] = std::make_shared<int>(30);
// 使用map中的shared_ptr
std::cout << *map[1] << std::endl; // 输出:10
std::cout << *map[2] << std::endl; // 输出:20
std::cout << *map[3] << std::endl; // 输出:30
return 0;
}
```
shared_ptr容器
shared_ptr是一种智能指针,它可以记录有多少个shared_ptrs共同指向一个对象,实现引用计数(reference counting)。当最后一个shared_ptr被销毁时,也就是引用计数为0时,它会自动释放所指向的对象。
在提供的代码中,我们可以看到shared_ptr的使用示例。通过使用std::shared_ptr<T>,我们可以创建一个指向TestUnit对象的shared_ptr。在这个示例中,通过SPVEC<TestUnit> cs和SPMAP<int, TestUnit> ms,分别创建了一个存储TestUnit对象的vector和map容器。这些容器中的元素都是shared_ptr类型的对象,因此可以自动管理内存的释放。
同时,在TestUnit类的构造函数和析构函数中,我们可以看到在对象的构造和析构阶段会打印一条相关信息,用于追踪对象的生命周期。