Причина, по которой нецелесообразно инициировать вектор auto_pointer, заключается в том, что существует алгоритм: sort(), который будет делать копию одного объекта в вашем контейнере в стеке. (sort() реализует quicksort, который нуждается в «своде») И, следовательно, удаление его при выходе из scpope функции sort(). Как и любой алгоритм или ваша собственная функция, способная взять ваш контейнер в качестве параметра и скопировать один из его объектов в стек, приведет к этой проблеме в результате.
Ну, в вашем случае, вы должны убедиться, что ваш класс не ведет себя как auto_ptr, или убедитесь, что вы никогда не вызовете такую функцию/алгоритм, который может удалить ваши базовые объекты. Первое решение лучше всего, согласно мне :)
Итак, ваш конструктор копий и ваш оператор аффектации также не должны отбрасывать свойство объекта-указателя.
Лучший способ добиться этого - обернуть интеллектуальный указатель boost вместо auto_ptr, чтобы сделать ваш контейнер безопасным при вызове такой функции/алгоритма.
44. Я считаю, результат применения алгоритма sort().
Не знаете, что именно произошло с StackOverflow, кто-то прокомментировал, использовал ли я VS2008 или gcc4.1 +. Комментарий ушел, так и мой ответ на комментарий. Да, я на gcc 4.1.2. Спасибо за подсказку! У меня есть std :: tr1 :: shared_ptr! Проблема решена :) – Srikanth