Недавно я обнаружил следующее при просмотре старого кода:
auto_ptr<DerivedClass> pointer = dynamic_cast<CBase*>( new CDerived() );
, за исключением того факта, что этот код не имеет смысла в действительных случаях (в действительных случаях class Derived
является производным от class Base
и неdynamic_cast
необходимо) есть проблема с владением объектом.Если по какой-либо причине dynamic_cast
возвращает нулевой указатель, auto_ptr
не будет привязан к созданному объекту, и объект будет протекать.
Существует ли какой-либо метод, помогающий предотвратить такие ошибки, как, например, проблема с компиляторомпредупреждение или что-то подобное?