1

简短版本: 我可以安全地为具有成员指针变量的类创建一个复制构造函数,其中一个在堆上,类型为xercesc::XercesDOMParser*xercesc::DOMDocument*?如果是这样,怎么做?

长版:

我写了一个类来包装一个 Xercesc 文档对象。它有两个成员变量,分别是指向 aXercesDOMParser和 a的指针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从析构函数中删除。但后来我有一个内存泄漏。

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

4

0 回答 0