heap_base
heap_base 模块提供堆内存基类,作为UI框架对象的内存分配基础。
Class Summary
OHOS::HeapBase
重载 new 和 delete 函数的基类,为派生类提供自定义内存分配与释放能力
- 构造:无
-
成员函数:
接口名称 功能简述 operator new 重载 new 运算符,通过 UIMalloc 分配内存 operator new 重载 nothrow new 运算符,通过 UIMalloc 分配内存且不抛出异常 operator delete 重载 delete 运算符,通过 UIFree 释放内存 -
使用包含头文件:
#include "gfx_utils/heap_base.h" - 声明头文件:
middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils/heap_base.h - 公有运算符:
void* operator new(size_t size)、void* operator new(size_t size, const std::nothrow_t&) noexcept、void operator delete(void* p) - 继承关系:无
- 嵌套类型:无
- 模板形参:无
Functions
OHOS::HeapBase
operator new
void* operator new(size_t size)
功能说明
- 核心用途:重载 new 运算符,使派生类对象通过
new创建时调用UIMalloc分配内存 - 设计目的:为图形模块提供统一的内存分配入口,便于内存使用统计与管控
- 使用场景:派生类使用
new表达式创建对象时自动调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| size | size_t | 待分配的内存大小(字节数) | 大于 0 |
返回值
- 返回类型:
void*
返回分配的内存地址
| 返回值 | 触发场景 |
|---|---|
| 非 nullptr 指针 | 内存分配成功 |
| nullptr | 内存分配失败 |
Kconfig 配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| ENABLE_MEMORY_HOOKS | 启用内存钩子,控制 operator new/delete 重载是否生效 | 1(开启) |
operator new
void* operator new(size_t size, const std::nothrow_t&) noexcept
功能说明
- 核心用途:重载 nothrow new 运算符,通过
UIMalloc分配内存且承诺不抛出异常 - 设计目的:为需要异常安全保证的场景提供不抛异常的内存分配方式,分配失败时返回 nullptr
- 使用场景:使用
new (std::nothrow)表达式创建对象时自动调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| size | size_t | 待分配的内存大小(字节数) | 大于 0 |
| const std::nothrow_t& | nothrow 标记,指示此重载不抛出异常 | std::nothrow |
返回值
- 返回类型:
void*
返回分配的内存地址
| 返回值 | 触发场景 |
|---|---|
| 非 nullptr 指针 | 内存分配成功 |
| nullptr | 内存分配失败 |
Kconfig 配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| ENABLE_MEMORY_HOOKS | 启用内存钩子,控制 operator new/delete 重载是否生效 | 1(开启) |
operator delete
void operator delete(void* p)
功能说明
- 核心用途:重载 delete 运算符,使派生类对象通过
delete释放时调用UIFree释放内存 - 设计目的:与 operator new 配对,确保通过
UIMalloc分配的内存使用UIFree释放,保持内存管理一致性 - 使用场景:派生类使用
delete表达式销毁对象时自动调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| p | void* | 指向待释放内存的指针 | 可为 nullptr |
Kconfig 配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| ENABLE_MEMORY_HOOKS | 启用内存钩子,控制 operator new/delete 重载是否生效 | 1(开启) |