删除TXMLDocument对象Embarcadero

时间:2013-05-20 08:58:07

标签: c++ c++builder delete-operator txmldocument

我有一个要删除的对象:

XMLDoc = new TXMLDocument(NULL);  

但我不知道该怎么做......它不起作用:

delete XMLDoc;
XMLDoc->free();

当我尝试删除对象时程序崩溃。

所以这是我的一部分代码。我上课了:

class C_XMLhandler{
    private:
        TXMLDocument *XMLDoc;
...
...
    public:
        void loadXMLfile(String name);
...
...
};

and example declaration of method:
bool C_XMLhandler::loadXMLfile(String name)
{
        XMLDoc = new TXMLDocument(NULL);
        Box=GetMagicBox(XMLDoc); //it's XML parser method, and it's doesen't matter
        delete XMLDoc; //when i reach this line the program scrashes
}

2 个答案:

答案 0 :(得分:1)

这是因为在调用现在删除的对象中的delete方法之前,您free了对象。

执行delete XMLDoc时,为XMLDoc分配的内存被标记为空,并执行对象析构函数。现在,当在调用XMLDoc->free()时使用指针时,您正在访问不再分配的内存,并且您遇到未定义的行为,这有时会导致崩溃。

首先应检查对象析构函数中是否未调用free方法,如果不是,则反过来执行此操作。 如果在析构函数中调用 free,则根本不需要调用它。

答案 1 :(得分:1)

http://docwiki.embarcadero.com/Libraries/XE6/en/Xml.XMLDoc.TXMLDocument.Destroy

该对象被连接到new(这个)的组件删除,否则不太确定,我在某处读到它被自动删除。 (HMMM)