【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

相关文章
|
1月前
|
编译器 C++
C++之类与对象(完结撒花篇)(上)
C++之类与对象(完结撒花篇)(上)
36 0
|
14天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
45 4
|
15天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
42 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
28 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
25 4
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
54 1
|
1月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
20 1
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
17 0