shared_ptr删除结构内的对象
shared_ptr delete object inside struct
我是C 的初学者,并用指针
丢失了我想在使用后删除指针以发布内存
shared_ptr<target> target_ptr(new targ(url));
struct targ
{targ(const std::string& p_url) : url(p_url) {}
std::string url;...
...
map<string, shared_ptr<target> >::iterator it;
for (it = targets.begin(); it != targets.end() ; ++it)
{
delete target;//????? it doesn't work
}
谢谢
target
是一种类型的名称。您不能delete target;
。
您也无法删除智能指针。只能删除指针类型,尽管智能指针是类型的智能指针。
未删除目标;但是删除它;
您也无法删除it
。it
是迭代器;不是指针。它指的是指代对象的智能指针。它不参考对象本身。
您也必须删除由智能指针拥有的指针。当所有指向其指向其的共享指针被摧毁(或指向其他地方(时,尖头的对象会自动破坏。因此,如果共享指针的唯一副本位于该地图中,则简单地从地图上删除指针将导致尖头对象被破坏。
您显然尝试删除所有共享对象。通过从地图上删除所有智能指针可以轻松实现: targets.clear()
。
您可以使用std::shared_ptr
的reset()
成员函数:
for (auto it = targets.begin(); it != targets.end() ; ++it)
{
it->second.reset();
}
或:
for (auto& p: targets)
p.second.reset();
这样做会在尖头target
对象上调用delete
,如果没有其他std::shared_ptr
参与该对象的所有权。
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 具有引用成员的结构是否具有唯一的对象表示形式
- 为什么我们再次从结构对象创建结构变量?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- 如何在C++中表示JSON文档的递归对象结构?
- 哪些值存储在对齐的结构/类对象的填充字节中
- 结构对象的指针成员在传递给函数时被修改
- C++ 提升 - 包含类层次结构对象的类的序列化
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- 如何使用方法返回指向对象结构的指针?
- 对象/结构等的C++内存布局是什么?
- 这些不同的对象结构之间有什么区别
- 如何找到C++可执行文件的所有对象(类对象/结构)
- C/C++ 中的对象/结构对齐
- 额外的继承对对象结构或实例化有影响吗?
- 尝试处理嵌套对象/结构和动态数组时出现内存泄漏或内存错误。可能的 Xcode/malloc 问题