/*
总结:delete free 对于基本数据类型,释放二次都会出错。
FREE不改变指针的值,delete 会改变值指针的值,使其指向一个固定的地址。
创建对象时的区别:
new delete 会自动调用 构造和析构函数
malloc free 不会自动调用 构造和析构函数
*/
#include<iostream>
#include<Windows.h>
#include<cstdlib>
using namespace std;
class mydata
{
public:
int *p;
mydata()
{
//p = (int *)malloc(1024 * 1024 * 100*4);
p = new int[1024 * 1024 * 100];
cout << "mydata" << endl;
}
~mydata()
{
delete p; //释放
cout << "delete mydata" << endl;
}
};
//mydata md; //创建对象时,会自动调用构造函数
void main()
{
//new delete 会自动调用 构造和析构函数
mydata *my = new mydata;
delete my;
//malloc free 不会自动调用 构造和析构函数
//mydata *my = (mydata *)malloc(sizeof(mydata)): //不会自动调用构造函数
//free(my); //free 不会调用析构函数
cin.get();
}
void main5b()
{
int *p = (int *)malloc(sizeof(int));
*p = 4;
free(p); //基本数据类型,free malloc new delete 效果一至
cin.get();
}
//总结:delete free 对于基本数据类型,释放二次都会出错。
//FREE不改变指针的值,delete 会改变值指针的值,使其指向一个固定的地址。
void main5a()
{
//基本数据类型 int char double
int *p = new int(5);
cout << (void *)p << " " << p << endl;
free(p);
//delete p; //delete 后 地址为 8123,一个固定的地址
cout << (void *)p << " " << p << endl;
//delete p;
p = nullptr;
cout << (void *)p << " " << p << endl; //这时的地址为 0
delete p; //nullptr 后可以再DELETE 不会出错。
cout << (void *)p << " " << p << endl;
//总结:delete free 对于基本数据类型,释放二次都会出错。
//FREE不改变指针的值,delete 会改变值指针的值,使其指向一个固定的地址。
cin.get();
}
C++ delete_new与free_malloc的区别_1
最新推荐文章于 2022-06-01 18:01:08 发布