1

我是 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&)”/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);

但是在使用智能指针的时候,这个初始化是怎么做的呢?谢谢

4

1 回答 1

2

如果 m_Parser 不接受 shared_ptr,你就做不到。shared_ptr 不是灵丹妙药,您只能在自己的代码中使用它们。您可以使用 .get() 方法返回智能指针下的原始指针,以与旧代码兼容。

于 2011-01-07T18:55:50.170 回答