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