1
我相信新的共享指針,並想知道如何initalize共享指針如果它也是一個成員變量?C++的Xerces-C:初始化一個shared_ptr
目前我的代碼看起來是這樣的: 在頭文件中,我有:
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的程序,我會接收地e出現以下錯誤: 調用純虛方法。 終止時沒有活動的異常。 大小爲8
任何見解我可以與初始化錯誤做的無效讀?
我懷疑是我從未分配的內存中讀取。
編輯:
所以在析構函數,我添加下面的代碼行終止命令和內存泄漏和錯誤全部消失之前!
如果(解析器) parser.reset();
爲什麼所有參考解析器想要離去,可以釋放之前?
非常感謝,謝謝。
你確定這個問題是局部shared_ptr的intialization?你確定Valgrind錯誤是在這個函數中嗎?你能否提供一些關於虛擬函數被調用的更多細節?您提供的細節越多,我們就可以提供幫助。 – templatetypedef 2011-01-10 22:40:31