ошибка cppcheck не соответствует тому, что я вижу

Я запускаю cppcheck и получаю следующее сообщение: «Переменной-члену i_refvec::data_ не присвоено значение в i_refvec::operator=».

Код взят из числового инструментария шаблона (TNT). Я думаю, что эти переменные инициализируются, но все равно получаю жалобу.

Помощь?

Соответствующая функция (начиная со строки 155):

template <class T>
i_refvec<T> & i_refvec<T>::operator=(const i_refvec<T> &V)
{
  // Do nothing if we're pointing at ourselves
    if (this == &V)
        return *this;

    if (ref_count_ != NULL)
    {
        (*ref_count_) --;
        if ((*ref_count_) == 0)
            destroy();
    }

    data_ = V.data_;
    ref_count_ = V.ref_count_;

    if (V.ref_count_ != NULL)
        (*(V.ref_count_))++;

    return *this;
}

person Tim Wescott    schedule 22.03.2017    source источник


Ответы (1)


Я разработчик Cppcheck.

Мне это тоже кажется ложным срабатыванием. Интересно, можете ли вы сократить его до короткого примера кода, который воспроизводит проблему... а затем сообщить о проблеме здесь: http://trac.cppcheck.net.

Ложные срабатывания часто вызваны какой-то крошечной деталью. Возможно где-то еще. Поэтому трудно сказать, почему это может потерпеть неудачу.

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

person Daniel Marjamäki    schedule 23.03.2017
comment
TNT и cppcheck, похоже, не очень хорошо работают вместе, может быть, потому, что TNT слишком тяжел для шаблонов? (TNT - это все заголовки, без кода cpp). Также утверждалось, что объекты-члены не инициализировались. Я постараюсь собрать для вас несколько примеров. - person Tim Wescott; 24.03.2017