shared_ptr容器
时间: 2023-10-06 16:10:04 浏览: 100
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类的构造函数和析构函数中,我们可以看到在对象的构造和析构阶段会打印一条相关信息,用于追踪对象的生命周期。
相关问题
[[nodiscard]] shared_ptr<const _Ty> shared_from_this() const{ return shared_ptr<const _Ty>(_Wptr) }
这段代码片段是在C++标准库中的智能指针`std::shared_ptr`内部的一个成员函数`shared_from_this()`的实现。`shared_from_this()`是一个用于获取当前对象自身引用的方法,当被其他已经持有该对象引用的共享所有权容器(如`shared_ptr`)所持有时。这里`_Ty`代表指向的对象类型,`const`说明返回的是常量引用。
函数返回了一个`shared_ptr<const _Ty>`类型的临时引用,即一个指向常量对象的共享所有权指针。这个方法的作用是在不需要传递原始对象的情况下,让外部拥有者能够间接访问并控制这个对象,同时保证了线程安全。
示例使用:
```cpp
class MyClass {
public:
std::shared_ptr<const MyClass> shared_from_this() const {
return shared_ptr<const MyClass>(static_cast<MyClass*>(this));
}
};
MyClass obj;
auto shared_ref = obj.shared_from_this();
```
shared_ptr,unique_optr,weak_ptr,auto_ptr
这四个都是 C++ 中的智能指针,它们的作用都是管理动态分配的内存,避免内存泄漏等问题。其中:
- shared_ptr 是共享所有权的智能指针,可以被多个指针共享,当最后一个指针离开作用域时,它所指向的对象会被自动销毁。
- unique_ptr 是独占所有权的智能指针,同一时间只能有一个指针指向它所管理的对象,当该指针离开作用域时,它所指向的对象会被自动销毁。
- weak_ptr 是弱引用智能指针,它不会增加所指向对象的引用计数,也不会影响所指向对象的生命周期,主要用于解决 shared_ptr 循环引用的问题。
- auto_ptr 是 C++11 之前的智能指针,已经被 unique_ptr 取代,它也是独占所有权的智能指针,但是存在一些问题,比如不能与 STL 容器一起使用等。
阅读全文