Создание конструктора копирования для класса с указателем на кучу

Укороченная версия: Могу ли я безопасно создать конструктор копирования для класса, который имеет переменные указателя члена, одна из которых находится в куче, которые имеют тип xercesc::XercesDOMParser* а также xercesc::DOMDocument*? Если так, то как?

Длинная версия:

Я написал класс, чтобы обернуть объект документа Xercesc. Он имеет две переменные-члены, которые являются указателями на XercesDOMParser и DOMDocument, Вот часть объявления класса, которая показывает эти два члена:

class XMLigator {
private:
xercesc::XercesDOMParser* _pParser;
xercesc::DOMDocument* _pDocument;
etc...

Указатели _pParser а также _pDocument инициализируются в конструкторе. Вот сокращенная версия конструктора с соответствующим кодом. Заметить, что _pParser создается с new оператор и находится в куче:

XMLigator::XMLigator(string strFile) : _strFile(strFile), _pDocument(NULL) {
xercesc::XMLPlatformUtils::Initialize();
_pParser = new xercesc::XercesDOMParser();
_pParser->parse(_strFile.c_str());
_pDocument = _pParser->getDocument();
}

Деструктор удаляет переменную-член _pParser:

XMLigator::~XMLigator(void) {
if (m_pParser) {
delete _pParser;
}
}

До сих пор я запрещал конструктор копирования и оператор присваивания, помечая их как частные и не определяя их.

Теперь я хотел бы, если возможно, создать конструктор копирования для этого класса, чтобы я мог сделать его типом возврата для функции следующим образом:

XMLigator getOne() {
XMLigator xml("/some/file.xml");
return xml;
}

Первая проблема, которую я вижу, это мой деструктор delete _pParser;, Так что я думаю, что это проблема. Я почти уверен, что должен удалить delete от деструктора. Но тогда у меня утечка памяти.

Я действительно понятия не имею, как подойти к этому. Может быть, это невозможно. У кого-нибудь есть подход, который я могу использовать для этого?

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

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