Если у вас действительно такое поведение, это, вероятно, означает, что нулевой символ отсутствует в formattedTime , и случайно n находится сразу после стека и вводит нулевой символ своим присутствием, или эквивалент из-за данных, сохраненных в стеке
Используйте boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Существует три оператора броска для интеллектуальных указателей: static_pointer_cast
, dynamic_pointer_cast
, и const_pointer_cast
. Они находятся любой в пространстве имен boost
(обеспечены <boost/shared_ptr.hpp>
) или пространстве имен std::tr1
(обеспеченный или Повышением или реализацией Вашего компилятора TR1).
Как комментарий: если Получено на самом деле происходит из Основы, то необходимо использовать dynamic_pointer_cast, а не статические броски. Система будет иметь шанс обнаружения, когда/если Ваш бросок не будет корректен.
Стоит упомянуть, что существует разница в количестве операторов приведения, предоставляемых Boost и реализациями TR1.
TR1 не определяет третий оператор const_pointer_cast ()