Из ваших тестов по удалению (которые совершенно ненужны, кстати, удаление по NULL совершенно определено) я понимаю, что connection
и т. Д. Может быть NULL. Однако выше вы не проверяете NULL перед их использованием. Поэтому, возможно, один из них имеет значение NULL, и ваш доступ, таким образом, вызывает ошибку сегментации.
Также: указатели, возвращенные из ConnectionFactory :: createCMSConnectionFactory, выделены с new
? Потому что в противном случае хранить их в auto_ptr
не правильно.
Кроме того, определен ли тип ConnectionFactory
(в отличие от объявленного просто (forward)) в точке, в которой вы создали экземпляр auto_ptr
? Поскольку создание экземпляра auto_ptr
для неполного типа (например, типа, который был только объявлен, еще не определен) является неопределенным поведением и может также привести к ошибке сегментации.
Это те возможности, которые я вижу. Там нет никакого способа сказать больше только с кодом, который вы показали. Вы действительно должны пройти через него с помощью отладчика и посмотреть, где происходит ошибка сегментации.