目录
1.什么是new和delete
- C语言中有两个函数用于动态开辟、释放内存----malloc和free
- c++中又引入了两个操作符----new和delete来用于开辟、释放内存
说到这应该对这两个操作符有所了解了,用法和C语言中的malloc和free差不很多,但是还是有所区别的,比如第一点就是标题中所写的那样new和delete都是操作符不是函数,但是如果只有这一点区别也没必要在引进新的来代替malloc和free,所以带着疑问继续探索吧!!!
2.new和delete的用法
2.1 new和delete普通用法
- 这里我们用代码的形式来介绍new和delete 与 malloc和free用法的不同
void Test()
{
//动态申请一个int类型的空间
int* p1=(int*)malloc(sizeof(int));
int* p2=new int;
//动态申请一个int类型的空间并初始化为10;
int* p3=(int*)malloc(sizeof(int));
*p3=10;
int* p4=new int(10);
//动态申请10个int类型的空间
int* p5=(int*)malloc(sizeof(int)*3);
int* p6=new int[3];
//释放
free(p1);
delete p1;
free(p3);
delete p4;
free(p5);
delete[] p6;
}
通过上面的对比,我们可以发现:
1.new和delete使用起来更加方便,new开辟内存时可以自动的计算出类型的大小。
2.new开辟内存时还可以直接初始化值
- 其实new和delete的优势并不只是这些,看看在类的对象中的用法吧!!!
2.2 new和delete的升级用法
- 还是用代码来讲解:
#include<iostream>
using namespace std;
class A
{
public:
A(int a, int b)
{
cout << "A(int ,int )" << endl;
m_a = a;
m_b = b;
}
~A()
{
cout << "~A()" << endl;
}
A(const A& a)
{
cout << "A(const A& )" << endl;
}
private:
int m_a;
int m_b;
};
int main(void)
{
A* a = new A(10, 20);
delete a;
return 0;
}
其运行结果为:
通过上面的结果和调试,我们可以知道:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,但是malloc与free不会。
以上就是我对new和delete的简单讲解