gpt4 book ai didi

c++ - shared_ptr 删除结构内的对象

转载 作者:行者123 更新时间:2023-11-30 03:25:39 24 4
gpt4 key购买 nike

我是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 是类型的名称。您不能删除目标;

您也不能删除智能指针。只能删除指针类型,智能指针 - 尽管它们的名称 - 是类类型。

not delete target; but delete it;

您也不能删除是一个迭代器;不是指针。它指向指向对象的智能指针;它不引用对象本身。

您也不得删除智能指针拥有的指针。当指向它的所有共享指针被销毁(或指向其他地方)时,指向的对象将自动销毁。因此,如果共享指针的唯一拷贝在该映射中,那么简单地从映射中删除指针将导致指向的对象被销毁。

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

关于c++ - shared_ptr 删除结构内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48888241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com