指向功能范围内的对象

Ton*_*ion 2 c++ pointers function

当你在函数范围内创建一些指针时,当函数超出范围时会发生什么?它们会被销毁吗?或者我应该在某些时候对它们进行删除?

void XMLDocument::AddNode(XMLNode& node)
{
    std::string val = node.GetNodeName();
    TiXmlElement* el = new TiXmlElement(val.c_str());  // What about this object ptr?
    TiXmlText * txt = new TiXmlText(node.GetNodeValue().c_str());  // And this one?
    el->LinkEndChild(txt);
    document.LinkEndChild(el);
}
Run Code Online (Sandbox Code Playgroud)

Nav*_*een 6

通常,您需要调用delete两个指针以避免内存泄漏.但在你的情况下,看起来你把这个指针放在一个document对象中(我假设document存储指针本身并且不会创建指向对象本身的副本).因此,如果你delete在这里调用,你给document对象的指针将是无效的.因此,如果documentobject拥有删除你在此函数中分配的内存的所有权,那么你不应该delete在这里调用,否则如果它正在创建你传递的对象的副本,那么你需要在delete这里.在这些类型的场景中,使用智能指针非常有用.有关更多详细信息,请查看boost :: shared_ptr.