欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > C++ (new和delete运算符,链接库,面向对象与面向过程)

C++ (new和delete运算符,链接库,面向对象与面向过程)

2025/4/22 15:46:56 来源:https://blog.csdn.net/2402_84770121/article/details/147230251  浏览:    关键词:C++ (new和delete运算符,链接库,面向对象与面向过程)

new和delete

堆区内存的分配与释放,在c语言中使用 malloc/free,在c++中使用new/delete

//只分配内存不初始化int *p = new int;//分配内存并初始化int *p = new int[10];//释放内存delete p;

开辟多个内存/释放

int *p = new int[3]{1,2,3};delete[3];

面试常问问题:

1 有了malloc/free为什么还要new/delete?

malloc和free是C++/C语言的标准库函数,new/delete是C++的运算符,它们都可以用于动态内存和释放内存

对于非内部数据类型的对象而言,光用malloc和free无法满足动态对象的要求,对象在创建时要自动执行构造函数,在消亡之前要自动执行析构函数(内部数据是编译器本身就有的,不需要用户定义如int,非内部数据类型是用户自己定义的,如class,struct)

由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能把执行构造和析构函数的任务强加给malloc/free,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete

2.为什么不淘汰malloc/free

因为c++程序经常要调用c函数,而c程序只能用malloc/free管理动态内存

3。malloc/free和new/delete的区别

都是动态管理内存的入口

malloc/free是c/c++标准库的函数,而new/delete是c++运算符

malloc/free只能分配与释放内存,new/delete还可以调用构造函数进行初始化,析构函数进行资源释放

前者需手动计算内存大小且返回值为void,后者可自己计算类型大小,返回对应类型的指针

后者的底层逻辑调用了前者

new直接跟类型,malloc跟字节个数

链接库

在C++中链接C语言函数库

#ifndef __headfile__
#define __headfile__#include <stdio.h>#ifdef __cplusplusextern "C"
{
#endif extern int add();extern int sub();#ifdef __cplusplus
}
#endif#endif

加上extern"C" 声明后,会告诉C++这些函数接口时C语言的函数接口,在编译时按照C语言的规则调用,而不是C++的函数名+参数类型的方式调用

面向对象与面向过程

面向过程是分析解决问题的方法然后一步步去做

面向对象是分析出解决问题需要哪些对象参与,然后把这些对象创建出来,让这些对象去解决问题

面向过程优缺点:设计简单,但难以维护,难以更改程序

面向对象优缺点:设计复杂,性能略微降低,但易维护易扩展复用,每个对象相互独立

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词