我是靠谱客的博主 虚幻路人,这篇文章主要介绍new和delete、malloc和free之间的异同点以及用法实例,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* malloc和free new和delete 两大类之间的<strong><span style="font-size:18px;">根本区别</span></strong> 1.malloc和free是属于c语言范畴的,而new和delete是属于c++范畴的。 2.malloc不能给对象进行初始化,而new可以给对象进行初始化。 3.new和delete会自动调用类的构造函数和析构函数,而malloc和free不会调用。 4.malloc和delete、new和free 可以混搭,但不建议这样用,因为会造成代码不方便管理,并且会造成对象无法调用析构函数而出错,比如使用new 和 free,如果类里开辟了一段新空间,如果无法调用析构函数,那么这段空间就会浪费点。 */ #include "stdafx.h" #include <iostream> using namespace std; class Test{ public: Test(int _a){ a = _a; cout << "构造函数被执行" << endl; } ~Test(){ cout << "析构函数被执行" << endl; } private: int a; }; int main() { //malloc 和 free 以及new 和 delete 用法说明 //1.基础数据类型的动态建立和释放 int *p = (int *)malloc(sizeof(int)); *p = 1; free(p); int *p = new int; *p = 2; delete p; //2.数组的动态建立和释放 int *p = (int *)malloc(10*sizeof(int));// 相当于int p[10] p[0] = 10; cout << p[0] << endl; free(p); int *p2 = new int[10]; p2[0] = 11; delete[]p2; //2.类的对象的动态建立和释放 Test *t1 = (Test *)malloc(sizeof(Test)); free(t1); Test *t2 = new Test(12);//初始化 delete t2; //结论:可发现 new 和 delete 会调用构造函数和析构函数 而malloc 和 free 不会调用! return 0; }

最后

以上就是虚幻路人最近收集整理的关于new和delete、malloc和free之间的异同点以及用法实例的全部内容,更多相关new和delete、malloc和free之间内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部