医疗电子网站建设,做粉丝网站,做网站的服务器带宽一般多少,怎么把别人网站源码弄出来目录 C和C的区别#xff08;申请堆区空间#xff09;C中的new和delete结束语 C和C的区别#xff08;申请堆区空间#xff09;
在c语言中#xff0c;在遇到需要申请一块堆区空间时#xff0c;我们往往会使用malloc申请#xff0c;使用free进行释放#xff0c;但是为什么… 目录 C和C的区别申请堆区空间C中的new和delete结束语 C和C的区别申请堆区空间
在c语言中在遇到需要申请一块堆区空间时我们往往会使用malloc申请使用free进行释放但是为什么在c中要使用新的方法其实是有原因的。
我们先尝试在c中使用malloc和free函数试试看会不会有什么问题。
代码如下
class Maker
{
public:Maker(){cout 构造函数 endl;}Maker(int a){cout 有参构造函数 endl;}~Maker(){cout 析构函数 endl;}
};void test01()
{Maker* m (Maker*)malloc(sizeof(Maker));free(m);
}int main()
{test01();
}接下来进行代码分析
Maker* m (Maker*)malloc(sizeof(Maker));如上所示由于声明的对象数据类型为Maker*则在malloc之前也需要进行类型转换为Maker*并且malloc中的参数为具体申请的空间大小即数据类型Maker的大小即sizeof(Maker)。
free(m);同样在使用完一块堆区空间之后我们需要使用free函数对申请的堆区空间进行释放。
代码运行结果如下 如上所示在使用malloc申请堆区空间和使用free释放堆区空间时并不会调用本身的构造函数和析构函数这其实就是在c中不使用malloc和free的原因那到底用什么方法呢这就是接下来要讲解的内容。
C中的new和delete
在c中使用new的形式来申请堆区空间使用delete的形式来释放堆区空间具体使用案例如下
class Maker
{
public:Maker(){cout 构造函数 endl;}Maker(int a){cout 有参构造函数 endl;}~Maker(){cout 析构函数 endl;}
};void test02()
{Maker* m new Maker;delete m;m NULL;Maker* m2 new Maker(10);delete m2;m2 NULL;
}int main()
{test02();
}接下来进行代码分析
Maker* m new Maker;如上所示使用new的方式来申请堆区空间也不需要像malloc那样还需要传入申请的具体内存大小这些部分实际上c已经替我们处理了所以我们只需要new 实际的类即可。
delete m;在c中使用delete来释放申请的堆区空间由于之前我们已经实例化对象并且实例化对象名为m所以我们直接delete m即可。
m NULL;成功释放掉堆区空间之后我们需要将实例化对象m置空这也是为了保证代码的严谨和规范。
Maker* m2 new Maker(10);在之前的代码中在申请堆区空间时实际上调用的是类的构造函数但是假如我们想要调用类的有参构造函数时需要怎么调用呢
如上代码所示相较于无参构造函数只需要在原来的基础上使用new Maker(10)的形式即可。
delete m2;在c中使用delete来释放申请的堆区空间由于之前我们已经实例化对象并且实例化对象名为m2所以我们直接delete m2即可。
m2 NULL;成功释放掉堆区空间之后我们需要将实例化对象m2置空这也是为了保证代码的严谨和规范。
代码运行结果如下 如上所示使用new和delete时成功的调用了类的构造函数和析构函数同时也实现了调用类的有参构造函数。
结束语
如果觉得这篇文章还不错的话记得点赞 支持下