我是共享指针的新手,想知道如果共享指针也是成员变量,如何初始化它?
目前我的代码看起来像这样:在头文件中,我有:
class Parser {
public:
Parser();
~Parser();
boost::shared_ptr<XercesDOMParser> parser;
{
在构造函数中,我有这样的东西:
Parser::Parser()
{
try {
XMLPlatformUtils::Initialize();
} catch (...) {}
parser = shared_ptr<XercesDOMParser> (new XercesDomParser());
}
在析构函数中我有:
Parser::~Parser() {
try {
XMLPlatformUtils::Terminate();
}catch(...) {}
}
但是用 Valgrind 编译程序,我会收到以下错误:调用了纯虚拟方法。在没有活动异常的情况下终止。大小为 8 的读取无效。
对我在初始化时可能做错了什么有任何见解吗?
我怀疑我正在从未分配的内存中读取。
编辑:
所以在析构函数中,我在终止命令之前添加了以下代码行,内存泄漏和错误都消失了!
if (解析器) parser.reset();
为什么对解析器的所有引用都必须在释放之前消失?
非常感谢,谢谢。