Как я могу отслеживать случаи, когда указатель из «нового» выражения передается в dynamic_cast? - PullRequest
1 голос
/ 31 марта 2011

Недавно я обнаружил следующее при просмотре старого кода:

auto_ptr<DerivedClass> pointer = dynamic_cast<CBase*>( new CDerived() );

, за исключением того факта, что этот код не имеет смысла в действительных случаях (в действительных случаях class Derived является производным от class Base и неdynamic_cast необходимо) есть проблема с владением объектом.Если по какой-либо причине dynamic_cast возвращает нулевой указатель, auto_ptr не будет привязан к созданному объекту, и объект будет протекать.

Существует ли какой-либо метод, помогающий предотвратить такие ошибки, как, например, проблема с компиляторомпредупреждение или что-то подобное?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Избавьтесь от всех своих dynamic_cast с.

Все они.

Тогда отслеживание не требуется.

1 голос
/ 31 марта 2011

Если вы не можете найти ничего доступного, вы также можете добавить свое правило в cpp check

...