使用堆上的指针成员为类创建复制构造函数

时间:2013-08-10 01:49:25

标签: c++ xerces-c

简短版本:我是否可以安全地为具有成员指针变量的类创建复制构造函数,其中一个在堆上,类型为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;。但后来我有内存泄漏。

我真的不知道如何处理这个问题。也许这是不可能的。有没有人有我可以使用的方法?

0 个答案:

没有答案