статический анализ — Coverity и C ++: куча (с новым) против размещения в стеке

я использую Coverity (5.5.1) (среди прочего), чтобы укрепить мой код. Я наткнулся на проблему, и теперь у меня есть сомнения, что моя установка покрытия не завершена. Посмотрите на этот пример:

class A
{
int _a,_b;
public:
A(int b) : _a(_b), _b(b)
{ }
};

int main(void)
{
A *a1 = new A(5);
delete a1;

A a2(5);
return 0;
}

Как видно я пользуюсь _b инициализировать _a прежде чем он будет инициализирован с b, В этот На вопрос я узнал, что было бы «хорошо» иметь такое предупреждение, выдаваемое компилятором или любым другим инструментом.

Вопреки моему первоначальному пониманию проблемы, которую я теперь выяснил, эта скрытая оболочка фактически испускает дефект, который идеально подходит (UNINT), но только при размещении в стеке, а не при создании с new, Так по моему mainЯ получаю предупреждение за A a2(5) но не для A *a1 = new A(5),

Мне кажется, что Coverity обрабатывает вызов конструктора по-разному при использовании new чем когда объект создан в стеке.

Есть ли что-то, что я упустил в своей конфигурации прикрытия? Что я могу сделать, чтобы получить предупреждение при размещении в куче?

2

Решение

Оказалось, что по поддержке это известная ошибка в Coverity (даже в текущей версии). Исправление может появиться в версии, выпущенной следующим летом.

Ошибка указана под ID: 50128 UNINIT FN: член, используемый в конструкторе до инициализации и как таковой будет помещен в примечания к выпуску после исправления и выпуска.

0

Другие решения

Других решений пока нет …