转自:
http://blog.csdn.net/raodotcong/article/details/6624099
用C语言中的free函数来释放C++中的new运算符分配的内存,会发生什么呢? 开始做实验。
测试代码
- #include <iostream>
- #define FREE_MEMORY
- int main()
- {
- int * pInt = new int[5];
- for ( int i = 0; i != 5; i++ )
- {
- pInt[i] = i;
- std::cout << pInt[i] << " ";
- }
- std::cout << std::endl;
- #ifdef FREE_MEMORY
- std::cout << "Now Free..." << std::endl;
- free(pInt);
- #else
- std::cout << "Now Delete..." << std::endl;
- delete [] pInt;
- #endif
- for ( int i = 0; i != 5; i++ )
- {
- std::cout << pInt[i] << " ";
- }
- std::cout << std::endl;
- system("pause");
- return 0;
- }
实验结果
实验结论
对于简单数据类型(例如int [ ]),使用new分配内存后,可以使用free来释放上述释放的内存,效果与delete相同。而复杂数据类型( 例如一个类指针),则不能用free来进行内存的释放,因为free与delete不同,不会执行类的析构函数。
原因分析
参见http://www.cppblog.com/Lee/archive/2009/03/09/75990.html