Я использую coverty (5.5.1) (среди прочих), чтобы упростить мой код. Я наткнулся на проблему, и теперь у меня есть сомнения в том, что моя установка покрытия не завершена. Посмотрите на этот пример:Покрытие и C++: куча (с новым) против размещения на стеке
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
. В вопросе this я узнал, что было бы «приятно иметь» такое предупреждение, выданное компилятором или любым другим инструментом.
Вопреки моему первоначальному пониманию проблемы теперь я узнал, что на самом деле Coverity излучает дефект, который соответствует отлично (UNINT), но только тогда, когда выделяется в стеке, а не при его создании с new
. Поэтому в моей функции main
я получаю предупреждение за A a2(5)
, но не для A *a1 = new A(5)
.
Мне кажется, что покрытие обрабатывает вызов конструктора при использовании new
, чем при создании объекта в стеке.
Есть ли что-либо, что я забыл в моей конфигурации покрытия? Что я могу сделать, чтобы иметь предупреждение при распределении в куче?