目录

NativeObjectReference API Not Paired

使用OH_NativeWindow_NativeObjectReference()或OH_NativeWindow_GetLastFlushedBufferV2()增加原生对象引用计数后,需及时调用OH_NativeWindow_NativeObjectUnreference()相应地减少引用计数,避免对象无法回收,造成内存泄漏。

规则配置

// rules.json

{
  "rules": {
     "cpp": {
       "ResourceLeak": [
         {
           "ruleId": "NativeObjectReference API Not Paired",
           "severity": "error",
           "skip": false
         }
       ]
     }
   }
}

正例

// 正例代码

#include "native_window/external_window.h"
void IncreaseRefWithDecrease() 
{
    OHNativeWindow *window;
    
    // 获取 OHNativeWindow...
    
    OH_NativeWindow_NativeObjectReference(window);
    
    // 逻辑操作...
    
    OH_NativeWindow_NativeObjectUnreference(window);
}
void BufferV2WithtDecrease(int *fenceFd, float matrix[16]) 
{
    OHNativeWindow *window;
    OHNativeWindowBuffer *buffer;
    
    // 获取 OHNativeWindow...
    
    OH_NativeWindow_GetLastFlushedBufferV2(window, &buffer, fenceFd, matrix);
    
    // 逻辑操作...
    
    OH_NativeWindow_NativeObjectUnreference(buffer);
}

反例

// 反例代码

#include "native_window/external_window.h"
void IncreaseRefWithoutDecrease() 
{
    OHNativeWindow *window;
    
    // 获取 OHNativeWindow...
    
    // 增加引用计数
    OH_NativeWindow_NativeObjectReference(window);
    
    // 使用 window...
    // 未 UnReference,未对应减少 - 内存泄漏!
}

Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)