shared_ptr删除结构内的对象

shared_ptr delete object inside struct

本文关键字:对象 结构 删除 ptr shared      更新时间:2023-10-16

我是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;

您也无法删除智能指针。只能删除指针类型,尽管智能指针是类型的智能指针。

未删除目标;但是删除它;

您也无法删除itit是迭代器;不是指针。它指的是指代对象的智能指针。它不参考对象本身。

您也必须删除由智能指针拥有的指针。当所有指向其指向其的共享指针被摧毁(或指向其他地方(时,尖头的对象会自动破坏。因此,如果共享指针的唯一副本位于该地图中,则简单地从地图上删除指针将导致尖头对象被破坏。

您显然尝试删除所有共享对象。通过从地图上删除所有智能指针可以轻松实现: targets.clear()

您可以使用std::shared_ptrreset()成员函数:

for (auto it = targets.begin(); it != targets.end() ; ++it)
{
    it->second.reset();
}

或:

for (auto& p: targets)
    p.second.reset();  

这样做会在尖头target对象上调用delete,如果没有其他std::shared_ptr参与该对象的所有权。