当前位置: 首页 > article >正文

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

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

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.kler.cn/a/536146.html

相关文章:

  • anaconda中可以import cv2,但是notebook中cv2 module not found
  • pycharm 中的 Mark Directory As 的作用是什么?
  • 《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?
  • 结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策
  • Redis --- 使用GEO实现经纬度距离计算
  • [Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测
  • linux——网络计算机{序列化及反序列化(JSON)(ifdef的用法)}
  • DeepSeek本地化部署
  • 【实战】excel分页写入导出大文件
  • 如何在Android Studio中开发一个简单的Android应用?
  • 【截图】selenium自动通过浏览器截取指定元素div的图片
  • 深度剖析 Redis:缓存穿透、击穿与雪崩问题及实战解决方案
  • java将list转成树结构
  • 劳务报酬所得税
  • DeepSeek辅助段落扩写的能力怎么样?
  • 【C++】C++11
  • RAID独立硬盘冗余阵列
  • 11.PPT:世界动物日【25】
  • 【vLLM 学习】使用 CPU 安装
  • leetcode_78子集
  • HTML5 新特性有哪些?
  • 02DevOps基础环境准备
  • 人工智能应用实例-自动驾驶
  • docker安装es及分词器ik
  • react 函数组件怎么使用生命周期函数
  • 高校体育场微信小程序管理系统(源码 +文档)