如何删除矢量中的共享指针值
how to delete a shared pointer value in vector
我已将共享指针类型定义为:typedef shared_ptr<Myclass> Sptr;
则生成向量:CCD_ 2;
现在我在一个向量中存储了几个共享指针,每个指针都指向一个动态分配的内存。
现在我想删除向量中的特定元素(children)(children.begin()到children.end())。
ItemList::iterator it = find(children.begin(), children.end(), child);
if (it != children.end())
{
//delete it;
it = children.erase(it);
}
现在children.erase(it),这将删除由共享指针内的指针动态分配和指向的内存。(只有矢量中指向动态存储器的共享指针,即计数为1)
提前谢谢。
是。如果共享指针的唯一实例是向量中的实例,那么将其从向量中擦除将导致该共享指针实例的析构函数运行。这将为共享指针所拥有的对象释放相关联的内存。
如果您知道引用计数为1。。。但是
使用共享指针的原因之一正是因为不知道什么时候某个东西是最后一个实例。如果你有那么多知识。。。并且该向量是"拥有"集合,则考虑std::unique_ptr
当删除shared_ptr
时,它会删除它持有指针的对象,当且仅当这是最后一个持有指针的shapred_ptr
。如果另一个shared_ptr
持有指向该对象的指针,则不会删除该对象。
从vector
中删除shared_ptr
时,应该会看到相同的行为。
示例代码:
#include <iostream>
#include <vector>
#include <memory>
struct A
{
~A() {std::cout << "Came to ~A()n";}
};
int main(int argc, char** argv)
{
std::shared_ptr<A> ptr1(new A());
std::shared_ptr<A> ptr2(new A());
{
std::cout << "In the nested scopen";
std::vector<std::shared_ptr<A>> ptrList;
ptrList.push_back(ptr1);
ptrList.push_back(ptr2);
}
std::cout << "Out of the nested scopen";
return 0;
}
OUtput:
In the nested scope
Out of the nested scope
Came to ~A()
Came to ~A()
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针