为什么在使用boost polymorphic_cast时会收到警告C28182?

时间:2014-08-27 04:26:06

标签: c++ boost visual-studio-2013 code-analysis

在使用boost::polymorphic_cast确保指针不为空时,我收到此错误(C12182)编译我的代码的Release | x86版本。

Warning 2   warning C28182: Dereferencing NULL pointer. 'tv' contains the same NULL value as '(dva::TimedValue *)=(tv)' did. : Lines: 808, 810, 812, 813, 808, 810, 812 c:\path\to\my\code\timedvalue.cpp   812 1   mylibrary

我的问题是,为什么我会收到此警告?我该怎么办?如果指针为null,则polymorphic_cast将抛出。据我所知,这段代码是正确的。我错过了什么?

这是我的代码。 apr_time_t是一个64位的int,而m_cobjs是指向从中派生TimedValue的类的指针的向量。如果指针为空,则注释掉的ASSERT_PTR会抛出异常,如果我取消注释,则会解析警告。

void TimedValueTable::RemovePointsBefore(apr_time_t time)
{
    for (size_t i = 0; i < m_cobjs.size(); )
    {
        TimedValue *tv = boost::polymorphic_cast<TimedValue *>(m_cobjs[i]);
        // ASSERT_PTR(tv);
        if (tv->get_Time() < time)
            delete tv;
        else
            ++i;
    }
}

0 个答案:

没有答案