简短版本:我是否可以安全地为具有成员指针变量的类创建复制构造函数,其中一个在堆上,类型为xercesc::XercesDOMParser*
且{{1} }}?如果是这样,怎么样?
长版:
我编写了一个包装Xercesc文档对象的类。它有两个成员变量,指向xercesc::DOMDocument*
和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;
。但后来我有内存泄漏。
我真的不知道如何处理这个问题。也许这是不可能的。有没有人有我可以使用的方法?