我有一些opaque类型,并且实现了一个模仿Core Foundation的引用计数语义。这很有效,除了clang警告我半有效的潜在泄漏。
MyTypeRef MyTypeRefCreateWithSomething(…) {
MyTypeRef value = MyTypeRefCreate(…);
MyTypeRef adjustedValue = MyTypeRefCreate(…);
MyTypeRefRelease(value);
return adjustedValue; // clang says that this might be a leak of `value`…
// which is only true if something goes wrong with reference counting.
}
我正在寻找像attribute_cf_consumed
这样的东西或者一种简单的方法来制作我自己的版本。
作为参考,这就是我目前如何使警告静音。它起作用,但在我看来,它只是留下警告一样糟糕。(我如果if
声明围绕MytypeRelease
调用free
)
void MyTypeRelease(MyTypeRef degree) {
((MyMutableTypeRef)degree)->refCount--;
#ifndef __clang_analyzer__
if ((degree->refCount <= 0) && !MyTypeIsNull(degree)) {
#endif /*__clang_analyzer__*/
free((CTJUMTMutableScaleDegree)degree);
#ifndef __clang_analyzer__
}
#endif /*__clang_analyzer__*/
}