Есть ли способ, чтобы clang знал о пользовательском непрозрачном подсчете ссылок?
У меня есть несколько непрозрачных типов, и я реализовал семантику подсчета ссылок, которая имитирует базовую основу. Это работает достаточно хорошо, за исключением того, что 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__*/
}