new delete基础
基础应用
#include "iostream"
using namespace std;
int main()
{
//1.基础的使用
//new 基本类型
int *p = (int *)malloc(sizeof(int));
free(p);
int *p2 = new int;
delete p2;
//分配数组
int *p3 = new int[4];
p3[0] = 1;
p3[1] = 2;
p3[2] = 2;
p3[3] = 3;
cout << p3[0] << endl;
delete[] p3;
system("pause");
return 0;
}
这里面只需要注意一点就是基础类型和数组类型的删除区别就OK。
深入
1.区别
#include "iostream"
using namespace std;
class MyClass
{
public:
MyClass()
{
cout << "我是构造函数" << endl;
}
~MyClass()
{
cout << "我是析构函数" << endl;
}
private:
};
int main()
{
//1.基础的使用
//new 基本类型
int *p = (int *)malloc(sizeof(int));
//free(p);
delete p;
int *p2 = new int;
//delete p2;
free(p2);
//分配数组
int *p3 = new int[4];
p3[0] = 1;
p3[1] = 2;
p3[2] = 2;
p3[3] = 3;
cout << p3[0] << endl;
//delete[] p3;
free(p3);
//我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别
//free和delete也可以相互的删除new和malloc的内存
//区别在对象的时候不一样
MyClass *my = (MyClass *)malloc(sizeof(MyClass));
system("pause");
return 0;
}我们发现没有执行构造函数。
#include "iostream"
using namespace std;
class MyClass
{
public:
MyClass()
{
cout << "我是构造函数" << endl;
}
~MyClass()
{
cout << "我是析构函数" << endl;
}
private:
};
int main()
{
//1.基础的使用
//new 基本类型
int *p = (int *)malloc(sizeof(int));
//free(p);
delete p;
int *p2 = new int;
//delete p2;
free(p2);
//分配数组
int *p3 = new int[4];
p3[0] = 1;
p3[1] = 2;
p3[2] = 2;
p3[3] = 3;
cout << p3[0] << endl;
//delete[] p3;
free(p3);
//我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别
//free和delete也可以相互的删除new和malloc的内存
//区别在对象的时候不一样
MyClass *my = (MyClass *)malloc(sizeof(MyClass));
MyClass *my1 = new MyClass();
system("pause");
return 0;
}new的话可以执行构造函数
#include "iostream"
using namespace std;
class MyClass
{
public:
MyClass()
{
cout << "我是构造函数" << endl;
}
~MyClass()
{
cout << "我是析构函数" << endl;
}
private:
};
int main()
{
//1.基础的使用
//new 基本类型
int *p = (int *)malloc(sizeof(int));
//free(p);
delete p;
int *p2 = new int;
//delete p2;
free(p2);
//分配数组
int *p3 = new int[4];
p3[0] = 1;
p3[1] = 2;
p3[2] = 2;
p3[3] = 3;
cout << p3[0] << endl;
//delete[] p3;
free(p3);
//我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别
//free和delete也可以相互的删除new和malloc的内存
//区别在对象的时候不一样
MyClass *my = (MyClass *)malloc(sizeof(MyClass));
free(my);
MyClass *my1 = new MyClass();
delete(my1);
system("pause");
return 0;
}
总结
从以上的代码中我们可以看出,malloc和free是不执行构造函数和析构函数的,但是new和delete他们组成是要自动调用构造函数还有析构函数的。如果是基础的类型的话这两者基本上没有区别。
转载请注明原文地址: https://ju.6miu.com/read-661167.html