c++指向数组指针相关

语言这个东西,一段时间不用确实容易模糊,今天看到一些面试题,发现对于数组指针这块内容又有点混淆了-。-还是记下来加深印象吧,总结以下几点,部分copy网上:

1. 一般在分配时分配器会自动写一个日志(一般在分配使用得内存之前又一个结构),用于记录分配的大小,分配内容的sizeof等等。
直观得想想,delete和delete[]都是传入一个void*如果不保存日志就无法知道分配时到底是分配了一个还是多个单元。所以虽然delete和delete[]不同,但是分配器在执行释放过程中都会读取这个日志,从而了解到底应该释放多少内存,但是从程序员的角度来说,既然分配了数组,就应该用delete[] 。虽然编译器不会去检查指针是否越过了分配的空间,但它确实记得到底分配了多少空间。

2. 在操作对象是指向一个对象而非一个基本类型的指针的时候,delete的另外一个重要任务是调用析构函数(注意,这是delete和free的区别)。如果再分配了一个对象数组后使用delete而非delete[]去释放这个指针,那结果将是只有该数组的第一个元素得到了析构。

3. 最后这条有些复杂:当操作对象是对象,且该对象有显式的析构函数时, 编译器会在数组前分配4个字节储存数组元素的个数。但事实上,无论是否有显式的析构函数,编译器都知道到底分配了多少空间。  

Raiden Cheng
原文地址:https://www.cnblogs.com/raidencheng/p/1672272.html