结构内的共享\u ptr删除对象 我是C++初学者,指针

结构内的共享\u ptr删除对象 我是C++初学者,指针,c++,struct,shared-ptr,C++,Struct,Shared Ptr,我想删除使用后释放内存的指针 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 =

我想删除使用后释放内存的指针

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
}
shared_ptr target_ptr(新目标(url));
结构目标
{targ(const std::string&p_url):url(p_url){}
std::字符串url;。。。
...
对它进行迭代器;
for(it=targets.begin();it!=targets.end();+it)
{
删除目标;//?????它不起作用
}

谢谢

您可以使用
std::shared\u ptr
reset()
成员函数:

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


如果没有其他
std::shared_ptr
参与该对象的所有权,则这样做将调用指向的
target
对象的
delete

target
是类型的名称。不能
删除目标;

您也不能删除智能指针。只能删除指针类型,而智能指针(不管名称如何)是类类型

不删除目标,但删除它

您也不能删除
是迭代器;不是指针。它指向指向指向对象的智能指针,而不是指向对象本身

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


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

我忘记了映射目标;您正在尝试删除类型
targets.clear()
并让智能指针进行清理。您可以编辑您的帖子,而不是添加关于这些更正的评论。当您使用
共享\u ptr
时,它会处理
删除
。您不应该手动执行此操作。无论如何,要获得比一般观察更具体的答案,您应该发布完整的代码,以便读者只需复制和编译。感谢大家,我找到了解决方案,我的字符串非常大,有20000个字符void replaceAll(string&str,const string&from,const string&to){if(from.empty())return;string wsRet;wsRet.reserve(str.length());size_t startpos=0,pos;而((pos=str.find(from,start_pos))!=string::npos){wsRet+=str.substr(start_pos,pos-start_pos);wsRet+=to;pos+=from.length();start_pos=pos;}wsRet+=str.substr(start_pos);str.swap(wsRet);//比str=wsRet;}快
for (auto& p: targets)
    p.second.reset();