C++动态内存管理与对象创建详解
需积分: 3 179 浏览量
更新于2024-07-27
收藏 170KB DOC 举报
"这篇C++笔记主要涵盖了C++中的动态内存管理、对象创建与析构、友元函数、指针与数组以及异常处理等方面的知识点。"
1. C++中的动态内存分配通过`new`运算符完成,它不仅在堆上分配内存,还会调用构造函数初始化对象。而`malloc`仅分配内存,不负责对象初始化,使用时需手动类型转换,且通过`free`释放内存时不会析构对象。
2. `new`运算符整合了对象的创建过程,包括内存分配和构造函数调用。如果分配失败,`new`会返回`0`。相反,`delete`先调用析构函数,然后释放内存,通常通过`free`实现。注意,重复删除同一对象会导致问题,因此删除后应将指针设为`0`。
3. 友元函数的定义不会因其被声明为内联而改变其性质,它仍然是全局函数而非类的成员。对于`void`指针,`delete`只会释放内存,不会调用析构函数,因为没有足够的类型信息来确定正确的析构函数。
4. 在栈上和堆上创建的对象不应混存于同一容器中,以防止管理内存时出现混淆。动态创建数组时,`new`会调用默认构造函数,而删除时必须使用`delete[]`。可以使用`int*const arr = new int[10]`等方式使指针更像数组,但指针常量和常量指针的含义不同,数组名与指针的取值行为也有所区别。
5. 当`new`分配内存失败时,系统会调用`new_handler`函数,一般情况下会抛出`bad_alloc`异常。程序员可以通过重载`new`和`delete`来自定义内存管理,但不能控制构造函数和析构函数的执行。
6. 公共继承(public inheritance)中,派生类对象可以被视为基类对象,但基类对象不能是派生类对象的实例。基类指针可以安全地转换为派生类指针,但必须注意动态类型检查和正确使用。
这些知识点构成了C++编程中关于内存管理、对象生命周期、类型转换和异常处理的基本概念,是理解和编写高效、可靠的C++代码的基础。深入理解这些概念对于避免内存泄漏、提高程序性能和确保类型安全至关重要。
2010-09-07 上传
2022-07-13 上传
2022-09-20 上传
2008-10-29 上传
2010-10-03 上传
sunkai458384068
- 粉丝: 6
- 资源: 1
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录