C++知识点总结1

1.C++有了malloc和free为什么还要new和delete?

第一:malloc和free属于c++的标准库函数,new和delete属于c++的运算符,他们都用于申请动态内存和释放内存。第二:对于非内部的数据对象(比如类对象),只用malloc和free无法满足动态对象的要求。这是因为对象在创建的同时需要自动执行构造函数,而在销毁对象前需要自动执行析构函数,而malloc和free属于库函数不是运算符,不在编译器控制范围内,所以不能自动执行构造函数和析构函数。

为什么库函数不在编译器控制范围内,而运算符在?

库函数是已经编译的代码,编译器不会再检查编译,由链接器将库通用户写好的代码合成exe文件。而运算符是否正确,编译器在编译扫描分析时就可以判定。

参考:https://blog.youkuaiyun.com/leikun153/article/details/80612130

https://www.cnblogs.com/Y1Focus/p/6707121.html

2.delete和delete[]的区别

delete只会调用一次析构函数,delete[]会调用每一个成员的析构函数。内部数据没有析构函数,所以即使改用delete时用了delete[]问题也不大。

3.子类析构时需要调用父类的析构函数吗?

析构函数的调用顺序是先子类析构,后父类析构。就是说在调用父类的析构函数时子类的信息已经全部销毁了。

4.C++不是类型安全的,两个不同类型的指针可以强制类型转换(用reinterpret_cast)

5.main函数执行之前还会执行什么代码?

全局对象的构造函数会在main函数之前执行

6.全局变量和局部变量有什么区别?如何实现,编译器和操作系统怎么知道的?

生命周期不同:全局变量随程序创建而创建,局部变量在局部函数内部或者局部循环体内存在,退出就不存在了。

适用方式不通:通过声明后全局变量可以程序的各个部分用到,局部变量只能在局部适用,分配在栈区

操作系统和编译器通过内存分配的位置来判断,全局变量分配在全局数据区,局部变量分配在堆栈区

7.C++内存有几种类型? 5个区

栈:由编译器在需要的时候分配,不需要的时候清除的变量所在的存储区,通常是局部变量和函数参数

堆:new分配的内存区域,释放编译器不管

自由存储区:malloc分配的内存区域,由free结束生命

全局/静态存储区

常量存储区:里面存储的是常量,不允许修改

参考:https://blog.youkuaiyun.com/qq_34037046/article/details/77714832

8.c++的构造函数为什么不能是虚函数,而基类的析构函数必须是虚函数?

vptr指针指向虚函数表,执行虚函数的时候,会调用vptr指针指向的虚函数的地址。当定义一个对象的时候,首先会分配对象内存空间,然后调用构造函数来初始化对象。vptr变量是在构造函数中进行初始化的。又因为执行虚函数需要通过vptr指针来调用。如果可以定义构造函数为虚函数,那么就会陷入先有鸡还是先有蛋的循环讨论中。

基类指针指向了派生类对象,而基类中的析构函数是非virtual的,而虚构函数是动态绑定的基础。现在析构函数不是virtual的,因此不会发生动态绑定,而是静态绑定,指针的静态类型为基类指针,因此在delete的时候只会调用基类的析构函数,而不会调用派生类的析构函数。这样,在派生类中申请的资源就不会得到释放,就会造成内存泄漏,这是相当危险的:如果系统中有大量的派生类对象被这样创建和销毁,就会有内存不断的泄漏,久而久之,系统就会因为缺少内存而崩溃。
参考:https://blog.youkuaiyun.com/gochenguowei/article/details/79682681

9.c++多态

参考:https://www.cnblogs.com/cxq0017/p/6074247.html

10.c++中public,protected,private的区别

第一:protected和private的区别在于 ,protected的访问标号限制,能够被派生类的成员函数访问,而private不能
第二:protected和public的区别在于,protected的访问限制,使其不能被基类的对象访问。

 

 

### 微信公众号与服务号的功能和用途区别 #### 功能差异 在功能方面,订阅号和服务号存在显著的不同。对于未经过认证的订阅号而言,无法连接到第三方链接,除非涉及小程序;而未经认证的服务号则可以连接至第三方链接[^1]。 #### 适用场景 当创建者的目的是提供特定的服务时,在不具备认证资格的前提下应优先考虑选择服务号。相反,如果主要意图是以发布文章的形式来进行推广,则订阅号会是一个更为合适的选择[^2]。 #### 发展历程中的变化 自微信公众号于2012年底推出以来,经历了多次更新和发展阶段。最初仅有的基础版本逐渐演变为包含多种类型的平台体系——即后来增加的企业号以及持续改进后的现有形态。这些演变使得当前环境下微信公众账号的选择更加多样化,并且允许运营人员依据实际需求做出最佳决策[^3]。 #### 技术支持层面 值得注意的是,在涉及到技术集成或自动化交互等功能实现上,无论是哪种类型的公众账号都离不开`access_token`这一重要凭证。它作为访问API接口的关键参数之一,在整个应用开发过程中扮演着不可或缺的角色: ```python import requests def get_access_token(appid, secret): url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}" response = requests.get(url).json() return response['access_token'] ``` 此函数用于获取`access_token`,它是发起任何HTTP请求给微信服务器的前提条件[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值