【c++】 --- 对象的动态建立和释放

简介: 【c++】 --- 对象的动态建立和释放

1、在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。

注意: new和delete是运算符,不是函数,因此执行效率高。

2、虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算符。new和delete运算符的一般使用格式为:

malloc free与new delete对比

(1)分配基础类型

C的做法

1. int *p = (int *)malloc(sizeof(int));
2. *p = 10;
3. free(p);

C++的做法

1. int *p2 = new int(10);     //
2. delete p2;

(2)分配数组

C的做法

1. int *p = (int *) malloc(sizeof(int) * 10);     //int array[10];
2. 
3. free(p);

C++的做法

1. int *pArray = new int[10];
2. 
3. delete [] pArray;
4.

(3)分配对象

1. class Test
2. {
3. public:
4.  Test(int _a)
5.  {
6.    a = _a;
7.  }
8. 
9. protected:
10. 
11. private:
12.   int a;
13. }

//c的做法

1. Test *pT1 = (Test *)malloc(sizeof(Test));
2. 
3. free (pT1);

//C++的做法

1. Test *pT2 = new Test(10);
2. 
3. delete pT2;

new delete新建类与malloc free的区别:

new   在调用的时候会调用类的构造函数; delete在调用的时候胡调用类的析构函数

3、malloc分配的内存可以delete吗? new分配的内存可以free吗?

(1)对于基础类型和数组,malloc分配的内存可以delete, new分配的内存可以free

1. int *p = (int *)malloc(sizeof(int));
2. *p = 10;
3. //free(p);
4. delete(p);
5. 
6. int *p2 = new int(10);     
7. //delete p2;
8. free(p2);
9. 
10. 
11. int *p = (int *) malloc(sizeof(int) * 10);     //int array[10];
12. //free(p);
13. delete[] p;
14. 
15. int *pArray = new int[10];
16. //delete [] pArray;
17. free(pArray);

在编译器上运行是不报错的。

(2)对于类类型,malloc分配的内存不可以delete, new分配的内存不可以free

相关文章
|
10天前
|
编译器 C++
C++之类与对象(完结撒花篇)(上)
C++之类与对象(完结撒花篇)(上)
27 0
|
5天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
15 4
|
5天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
15 4
|
15天前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
15天前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
17天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
22 3
|
17天前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
49 1
|
17天前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
15 1
|
17天前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
19 1
|
6天前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
13 0