Learning ROS for Robotics Programming - Second Edition
12.3用于数组的new和delete在C + +里,同样容易在栈或堆上创建一个对象数组。当然,应当为数组里的每一个对象调用构造函数。有一个约束:除了在栈上整体初始化(见第4章)外必须有一个缺省的构造函数,因为不带参数的构造函数必须被每一个对象调用。当使用new在堆上创建对象数组时,还必须做一些事情。下面有一个对象数组的例子:
foo* fp = new foo[100];
这样在堆上为100个foo对象分配了足够的内存并为每一个对象调用了构造函数。现在,我们拥有一个foo*。它和用如下表达式创建单个对象得到的结果是一样的:
foo* fp2 = new foo;
因为这是我们自己写的代码,并且我们知道fp实际上是一个数组的起始地址,所以用fp[2]选择数组的元素是有意义的。销毁这个数组时发生了什么呢?下面的语句看起来是完全一样的:
delete fp2; //OK
delete fp; // Not the desired effect
并且效果也会一样:为所给地址指向的foo对象调用析构函数,然后释放内存。对于fp2,这样是正确的,但对于fp,另外99个析构函数调用没有进行。正确的存储单元数量还会被释放。
更多关于构造函数和析构函数的内容,可以参考构造函数和析构函数以及析构函数和拷贝构造函数。对C++中的new和delete的更深入分析,请查看C++中的new delete构造析构函数dynamic_cast分析。这些资源将帮助你更好地理解和应用这些概念。
构造函数和析构函数的使用看似简单,但其中蕴含的知识和技巧却非常丰富。通过以上资源的学习,相信你会在实际编程中更得心应手!
用户评论