Я новичок в общих указателях, и мне было интересно, как инициализировать общий указатель, если он также является переменной-членом?
В настоящее время мой код выглядит примерно так:
В заголовочном файле у меня есть:
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.
Любое понимание того, что я могу делать неправильно при инициализации?
Я подозреваю, что я читаю из нераспределенной памяти.
EDIT:
Итак, в деструкторе я добавил следующие строки кода перед тем, как команда завершения, утечки памяти и ошибки исчезли!
if (парсер)
parser.reset (); * +1022 *
Почему все ссылки на синтаксический анализатор должны быть удалены, прежде чем он может быть освобожден?
Очень признателен, спасибо.