C++知识点点点点点(6)

  • 进程间通信方式

每个进程的用户地址空间都是独立的,一般是不能互相访问的;内核空间是每个进程都共享的,进程之间进行通信必须通过内核。

preview

preview

https://zhuanlan.zhihu.com/p/165224175

 

  • 内存溢出、内存泄露

内存溢出:程序在申请内存时,没有足够的空间供其使用,例如申请了int空间却存了long数据

内存泄露:程序申请的内存在使用结束之后没有进行释放

 

  • 类的大小

空类:空类被实例化时,编译器为其分配1字节,所以size为1

虚函数类:类中包含虚函数时,会有一个指向虚函数表的指针(vbtr),size为指针大小

普通数据成员:按照其数据类型分配大小,存在内存对其问题

静态数据成员:不属于类

普通成员函数:类的大小与其构造函数、析构函数及其他成员函数无关,只与其数据成员有关

普通继承:类本身数据成员大小+基类数据成员大小

含有虚函数的继承:类本身数据成员大小+基类数据成员大小+虚函数表指针(继承多个类,会有多个虚函数表指针)

虚拟继承:继承类会有一个虚基类指针(vbptr),位于类虚函数指针与成员变量之间,若基类没有虚函数,则其位于继承类的最前端

https://www.cnblogs.com/sz-leez/p/7119232.html

https://blog.csdn.net/longjialin93528/article/details/80160467

 

  • 类产生的默认函数

在C++中,共有8个默认函数:

构造函数:同类名,可重载,不能为虚函数,不能有返回值(void也不行),默认构造函数不会做任何初始化

拷贝构造函数:构造函数的重载,参数和返回值均为引用(可实现连续构造),默认构造函数执行“浅拷贝”

析构函数:不能重载,不能有返回值,可以为虚函数(通过基类指针析构子类对象)

重载赋值运算符函数:已有两个对象之间进行赋值操作

重载取地址运算符函数:无参

重载取地址运算符const函数:无参

移动构造函数(C++11):借助右值语义实现,临时对象即将消亡,但里面的资源需要再被利用,可使用移动构造

重载移动赋值运算符函数(C++11):同上

 

类函数标识符:

default(C++11):被标识的默认函数将使用类的默认行为,如A()=default;

delete(C++11):被标识的默认函数将禁用,如A()=delete;

override:被标识的函数需要强制重写基类虚函数;

final:被标识的函数禁止重写基类虚函数

https://www.cnblogs.com/yuwanxian/p/10924835.html

 

  • C++11新特性

nullptr:指针空值常量,解决NULL因其字面常量为0的二义性,https://zhuanlan.zhihu.com/p/82054486

default/delete:上述有说明

移动语义与右值引用:移动语义避免移动原始数据,只修改记录;右值引用实现移动语义

auto:类型指示符,用于自动推导,指针类型(auto同auto*),引用类型(使用auto&)

dectype:查询表达式的数据类型,解决泛型编程中,由于有些类型由模板参数制定,难以表示的问题

lambda表达式:匿名函数(没有函数名,使用[ ]表示),嵌入式地使用,不需要找其他地方调用

override / final:虚方法的管理,上述有说明

多线程:引入多线程,不必依赖第三方库

可变参数模板:接受可变数量的参数

智能指针:unique_ptr、share_ptr、weak_ptr

https://zhuanlan.zhihu.com/p/103258069

 

  • 再谈继承与多态(虚机制)

继承与静态成员:整个继承体系只有一个静态成员(切记:static成员不属于类)

友元:不能是虚函数,友元不属于类,虚函数只有类成员才有

派生类与基类关系:派生类可以使用基类的方法,条件是方法不是私有的(私有可通过基类的方法访问);基类指针、引用可不进行显式类型转换指向/引用派生类对象,但只能用于调用基类方法。

多态公有继承:在派生类中重定义基类的方法(上述有说明);使用虚方法

虚方法(virtual):使用虚方法,程序将根据引用或指针指向的对象类型来选择方法;在基类声明为虚方法,在派生类中自动成为虚方法,常常在派生类中显式的添加virtual,用于指示哪些是虚方法。

构造函数与析构函数:构造函数不能是虚函数,类做基类时,析构函数应为虚函数

菱形继承:利用虚继承解决理菱形继承会出现调用不明确问题

https://blog.51cto.com/zimomo/1784074

 

  • extern关键字

外部声明”关键字,扩大变量/函数的作用域,使得其他源文件和头文件可以复用同样的变量/函数。

 

  • 重写、重载、重定义

重写:覆盖,发生在继承中,子类重新定义父类中有相同名称和参数虚函数(virtual)

重载:函数名相同,参数(个数、类型或顺序)不同,返回值类型可同可不同,根据参数类型决定调用的函数

重定义:隐藏,发生在继承中,子类重新定义父类中有相同名称非虚函数参数列表可不同),屏蔽同名父类函数

**静态成员函数不能是虚函数

https://blog.csdn.net/xu1105775448/article/details/80118159

 

  • new、malloc

自由存储区:C++中,内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。自由存储区是否是堆取决于operator new的实现,可以是堆,可以是静态存储区。

void*:无类型指针,使用时作强制类型转化

 

  • 智能指针原理

智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。

unique_ptr:C++98 auto_ptr的替代品,用于不能被多个实例共享的内存管理,仅有一个实例拥有内存所有权

shared_ptr:使用引用计数的智能指针,可以有多个shared_ptr实例指向同一块动态分配的内存

weak_ptr:用来解决shared_ptr相互引用时的死锁问题,是对对象的弱引用,不会增加对象的引用计数,和shared_ptr可相互转化

https://www.cnblogs.com/WindSun/p/11444429.html

https://zhuanlan.zhihu.com/p/54078587

 

  • make_shared与shared_ptr的构造函数

make_shared:在动态内存中分配一个对象并初始化,返回指向此对象的shared_ptr

 

由上图可看出make_shared的优点——提高性能:

每个std::shared_ptr都指向一个控制块,控制块包含被指向对象的引用计数以及其他东西。这个控制块的内存是在std::shared_ptr的构造函数中分配的。因此直接使用new,需要一块内存分配给Widget,还要一块内存分配给控制块。

如果使用std::make_shared,一次分配就足够了。这是因为std::make_shared申请一个单独的内存块来同时存放Widget对象和控制块。这个优化减少了程序的静态大小,因为代码只包含一次内存分配的调用,并且这会加快代码的执行速度,因为内存只分配了一次。另外,使用std::make_shared消除了一些控制块需要记录的信息,这样潜在地减少了程序的总内存占用。

make_shared的缺点:

构造函数为保护或私有时,无法使用;

对象的内存可能无法及时回收:

https://www.cnblogs.com/leijiangtao/p/12046333.html

https://www.jianshu.com/p/03eea8262c11

 

  • 指针的声明、初始化

int* p1, p2——指针p1和int变量p2

对每个指针变量名,都需要使用一个*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值