UE学习日志#24 C++笔记#10 内存管理1

news/2025/2/8 18:26:37 标签: 学习, c++, 笔记, 游戏引擎, unreal engine

注:此文章为学习笔记,只记录个人不熟悉或备忘的内容

1 使用动态内存

1.1 如何描述动态内存

        区分好栈上自动分配的变量和自由存储区的变量。

1.2 分配和释放

1.使用new和delete

        delete ptr;ptr=nullptr;

2.避免在C++中使用malloc()和free(),他们不会调用构造函数和析构函数

1.3 数组

分配一个二维数组的函数示例:

char** allocateCharacterBoard(size_t xDimension,size_t yDimension)
{
    char** myArray{new char*[xDimension]};
    for(size_t i{0};i < xDimension;i++){
        myArray[i]=new char[yDimension];
    }
    return myArray;
}

当把数组传递给函数时,编译器将数组视为指针,所以修改数组都是修改原数组的值。

2 底层内存操作

2.1 指针运算

        根据声明类型,+一个数表示移动指定个声明的类型的大小。

        两个同类型指针相减,得到的是指向的类型的元素个数,而不是两个指针之间字节数的绝对值。

2.2 自定义内存管理

        涉及到重载new和delete运算符。

2.3 了解垃圾回收和对象池

        进一步了解在后边,C++没有内建垃圾回收,但例如shared_ptr 提供类似垃圾回收的功能,销毁某资源的最后一个shared_ptr实例时,会同时销毁资源。

3 常见的内存陷阱

3.1 缓冲区分配不足以及内存访问越界

3.2 内存泄漏

        分配了内存,但没有释放,就会发生内存泄漏。可以通过一些工具追踪内存泄漏。

4 智能指针

        当智能指针离开作用域或被重置时,会自动释放所占用的资源。智能指针可用于管理在函数作用域内(或作为类的数据成员)动态分配的资源。也可以通过函数实参来传递动态分配的资源的所有权。

        1.可通过模板为任何指针类型编写类型安全的智能指针类

        2.可使用运算符重载为智能指针对象提供一个接口,使智能指针对象的使用和普通指针一样

(未完待续)


http://www.niftyadmin.cn/n/5845199.html

相关文章

CRM系统中的数据分析和报表功能如何帮助企业?

CRM系统中的数据分析和报表功能&#xff1a;企业战略决策的得力助手 在当今竞争激烈的商业环境中&#xff0c;企业要想保持竞争力并实现持续增长&#xff0c;必须依靠精准的数据分析来制定有效的战略决策。而客户关系管理&#xff08;CRM&#xff09;系统的数据分析与报表生成…

【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)

目录 1 简介 1.1 场景介绍 1.2 约束与限制 2 文本转语音 2.1 场景介绍 2.2 约束与限制 2.3 开发步骤 2.4 设置播报策略 2.4.1 设置单词播报方式 2.4.2 设置数字播报策略 2.4.3 插入静音停顿 2.4.4 指定汉字发音 2.5 开发实例 3 语音识别 3.1 场景介绍 3.2 约束…

使用Python和`moviepy`库从输入的图片、动图和音频生成幻灯片式视频的示例代码

下面是一个使用Python和moviepy库从输入的图片、动图和音频生成幻灯片式视频的示例代码。在这个示例中&#xff0c;我们将依次展示每张图片或动图&#xff0c;同时播放音频。 from moviepy.editor import ImageClip, VideoFileClip, AudioFileClip, concatenate_videoclipsdef…

【redis】缓存设计规范

本文是 Redis 键值设计的 14 个核心规范与最佳实践&#xff0c;按重要程度分层说明&#xff1a; 一、通用数据类型选择 这里我们先给出常规的选择路径图。 以下是对每个步骤的分析&#xff1a; 是否需要排序&#xff1f;&#xff1a; zset&#xff08;有序集合&#xff09;用…

【B站保姆级视频教程:Jetson配置YOLOv11环境(八)TensorRT模型导出】

Jetson配置YOLOv11环境&#xff08;8&#xff09;TensorRT模型导出 文章目录 1. Conda 虚拟环境配置TensorRT2. onnx, onnxslim, onnxruntime-gpu安装2.1 简介2.2 onnx&#xff0c;onnxslim安装2.3 onnxruntime-gpu安装 3. TensorRT格式导出&推理验证3.1 模型导出为TensorR…

启明星辰发布MAF大模型应用防火墙产品,提升DeepSeek类企业用户安全

2月7日&#xff0c;启明星辰面向DeepSeek等企业级大模型业务服务者提供的安全防护产品——天清MAF&#xff08;Model Application Firewall&#xff09;大模型应用防火墙产品正式发布。 一个新赛道将被开启…… DeepSeek的低成本引爆赛道规模 随着DeepSeek成为当前最热的现象级…

解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-downloads.py

downloads.py ultralytics\utils\downloads.py 目录 downloads.py 1.所需的库和模块 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…