大家都知道C++中的new和delete和C语言中的malloc和free相比十分的便利,但是new和delete还有new[]和delete[]并不能混淆使用,若是混淆使用会产生严重的后果。
malloc()的作用是直接开辟一段空间,free(p)则是释放从p开始开辟的所有连续空间。这个使用方式十分简单,不用赘述。
而new和delete会检测开辟空间的类型从而开辟空间,而且会家按此开辟的空间是否含有自定义的构造或是析构函数,若有则会自主调用。而且在delete检测到自定义析构函数并且delete和new[]配对使用时会报错。
new A[n]在检测到含有自定义的构造函数时会调用A的构造函数n次,在A含有自定义析构函数时则会多开辟四个字节在数组头部用于储存数组的大小,再返回该空间的第五个字节的地址。
delete []A在检测到含有自定义析构函数时,会向前四个字节取出开辟空间时存入的数字n,并且调用n次析构函数。然后释放所有空间。
动态内存管理的大概运作方式就是这样的,这只是很表面概括的总结,其中还有很多复杂的结构各自自行编程探讨。