XCode 4.6 clang分析器担心空C++指针比不能为空

Mar*_*ein 2 xcode clang objective-c++

运行XCode 4.6的分析器和新的clang编译器,我发出了警告

被调用的C++对象指针为空

即使是像保守的表达

- (BOOL) validate: (Node*) node
{
    if (!self.hypertext) return YES;
    return self.hypertext->HasNode(node);
}
Run Code Online (Sandbox Code Playgroud)

1)我怎样才能说服静态分析仪这是否得到了适当的保护?2)在某些情况下,我可能想断言指针不会为空.怎么样?

Ale*_*nez 6

这里的问题是你没有使用指针但是使用ObjC调用的结果.

虽然非常不可能,但分析器将看到以下情况:第一次调用中返回的指针不为null,因此测试通过,第二次调用中返回的指针为null.

您应该能够使用局部变量解决问题.

- (BOOL) validate: (Node*) node
{
    YourType ht = [self hypertext];
    if (!ht) return YES;
    return ht->HasNode(node);
}
Run Code Online (Sandbox Code Playgroud)