用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不同,不会执行类的析构函数。
原因分析