удаление объекта TXMLDocument Embarcadero

У меня есть объект для удаления:

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
}

0

Решение

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

Объект удаляется компонентом, к которому он подключен (это), иначе не совсем уверен, я где-то читал, что он автоматически удаляется. (Хммм)

1

Другие решения

Это потому что ты delete объект перед вызовом free метод в теперь удаленном объекте.

Когда вы делаете delete XMLDoc память, выделенная для XMLDoc помечается как свободный, и деструктор объекта выполняется. Теперь при использовании указателя в вызове XMLDoc->free() вы обращаетесь к памяти, которая больше не выделяется, и вы испытываете неопределенное поведение, что несколько раз приводит к краху.

Вы должны сначала проверить, если free Метод не вызывается внутри деструктора объекта, и если это не так, делайте это наоборот. Если free вызывается в деструкторе, вам вообще не нужно его вызывать.

1

По вопросам рекламы [email protected]