C++中的对象数组与new、delete操作

需积分: 50 54 下载量 55 浏览量 更新于2024-08-06 收藏 14.32MB PDF 举报
"用于数组的new和delete-learning ros for robotics programming - second edition" 在C++编程中,`new`和`delete`是动态内存管理的关键操作,尤其在处理数组时更为重要。在C++中,我们可以选择在栈或者堆上创建对象数组。栈上的数组在声明时大小必须已知,而堆上的数组大小可以在运行时动态确定。 标题提到的"用于数组的new和delete"主要涉及以下几个知识点: 1. **动态内存分配**:在堆上创建对象数组通常使用`new`运算符。例如,`foo* fp = new foo[100];` 这行代码会在堆上为100个`foo`对象分配内存,并调用每个对象的默认构造函数。这种动态分配的内存不会在作用域结束时自动释放,需要程序员手动管理。 2. **默认构造函数**:创建数组时,如果每个对象都需要调用构造函数,那么类必须有一个无参数的默认构造函数,因为在堆上创建数组时无法为每个对象传递参数。 3. **指针和数组**:`new`返回的是一个指向数组首元素的指针,如`foo* fp`。因此,可以使用指针下标操作符`[]`来访问数组元素,例如`fp[2]`表示访问数组的第三个元素。 4. **正确使用delete**:销毁堆上创建的数组时,必须使用`delete[]`而不是`delete`。例如,`delete fp;`只会释放fp所指的首个对象的内存,并调用其析构函数,而不会处理数组的其余部分。正确的做法是`delete[] fp;`,它会释放整个数组的内存,并依次调用所有对象的析构函数。 5. **内存泄漏**:如果不正确地使用`delete`,可能导致内存泄漏,即分配的内存没有被释放,从而浪费系统资源。 6. **C++编程思想**:书中的内容可能涵盖如何在机器人操作系统(ROS)的编程中应用这些C++原则。ROS是一个用于机器人软件开发的框架,它广泛使用C++作为主要编程语言。了解有效的内存管理和面向对象编程的概念对于编写高效、健壮的ROS节点至关重要。 7. **面向对象编程基础**:在开始深入学习C++和ROS之前,了解面向对象编程的基本概念是必要的。对象是具有特定属性(数据元素)和行为(函数)的实体,类是这些对象的蓝图。通过创建类,程序员可以定义自定义的数据类型,实现问题的抽象,使得代码更加模块化和可重用。 8. **抽象数据类型**:在OOP中,抽象数据类型允许程序员定义新的数据结构,这些结构具有内置数据类型(如整数或浮点数)的特性,但可以根据问题需求定制。对象之间通过消息传递进行交互,即对象接收消息并执行相应的操作。 9. **继承和多态**:OOP还包括继承,允许子类继承父类的特性并添加新的功能,以及多态性,允许不同类的对象对同一条消息作出不同的响应。这些特性在ROS编程中也有广泛应用,比如在创建不同类型的传感器节点时。 以上内容强调了C++动态内存管理的关键点,以及面向对象编程在C++和ROS编程中的重要性。理解和熟练掌握这些概念对于编写高质量的ROS代码至关重要。