Xerces-c& shared_ptrs

时间:2011-01-07 18:51:10

标签: c++ shared-ptr xerces

我对shared_ptr的概念不熟悉,并试图重构我的程序,使其使用智能指针而不是常规指针。我很想尝试将shared_ptr与Xerces-c一起使用,并且我在初始化错误处理程序时遇到了问题。

我有一个实现errorHandler的类。

class Handler: public ErrorHandler {
public:
    void warning (const SAXParseException&) {   cerr << "THIS IS A WARNING\n";}
    void error (const SAXParseException&) { cerr << "THIS IS A ERROR\n"; return;}
    void fatalError(const SAXParseException&) { cerr << "THIS IS A FATALERROR\n";}
    void resetErrors() {}
}

在实现中,我试图将我从ErrorHandler实现的类传递给setErrorHandler函数:

   boost::shared_ptr<XercesDOMParser> m_Parser;
   boost::shared_ptr<Validator> m_ErrorHandler;
   m_ErrorHandler = boost::shared_ptr<Handler>(new Handler());
   m_Parser->setErrorHandler(m_ErrorHandler);

但它在最后一行出错,因为类型不匹配:

错误:没有匹配函数来调用'xercesc_3_1 :: XercesDOMParser :: setErrorHandler(boost :: shared_ptr&amp;)' /opt/include/xercesc/parsers/XercesDOMParser.hpp:236:注意:候选人是:void xercesc_3_1 :: XercesDOMParser :: setErrorHandler(xercesc_3_1 :: ErrorHandler *)

使用常规指针,可以这样说:

     XercesDOMParser * m_Parser;
     Handler * errorHandler;
m_Parser = new XercesDOMParser;
errorHandler = new Handler();
m_Parser->setErrorHandler(errorHandler);

但是在使用智能指针时,如何进行初始化?感谢

1 个答案:

答案 0 :(得分:1)

如果m_Parser没有使用shared_ptr,则无法进行。 shared_ptr不是灵丹妙药,你只能在自己的代码中使用它们。您可以使用.get()方法返回智能指针下的原始指针,以便与遗留代码兼容。