当前位置:网站首页>虫子 内存管理 上
虫子 内存管理 上
2022-06-26 13:06:00 【华为云】
C++11 的成员初始化新玩法
C++11支持非静态成员变量在声明时进行初始化赋值,==但是要注意这里不是初始化,这里是给声明的成员变量缺省值。==
再次理解封装
C++是基于面向对象的程序,==面向对象有三大特性即:封装、继承、多态==。
C++通过类,将一个对象的属性与行为结合在一起,使其更符合人们对于一件事物的认知,将属于该对象的所有东西打包在一起;通过访问限定符选择性的将其部分功能开放出来与其他对象进行交互,而对于对象内部的一些实现细节,外部用户不需要知道,知道了有些情况下也没用,反而增加了使用或者维护的难度,让整个事情复杂化。
再次理解面向对象
可以看出面向对象其实是在模拟抽象映射现实世界
C/C++内存管理
C/C++内存分布
我们先来看下面的一段代码和相关问题
==虚拟进程地址空间==
【说明】
- 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。
- 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共
享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)- 堆用于程序运行时动态内存分配,堆是可以上增长的。
- 数据段–存储全局数据和静态数据。
- 代码段–可执行的代码/只读常量。
C语言中动态内存管理方式
==malloc/calloc/realloc和free==
【面试题】
malloc/calloc/realloc的区别?
C++内存管理方式
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:==通过new和delete操作符进行动态内存管理==。
new/delete操作内置类型
int main(){ //c语言申请10个int的数组 int* pa = (int*)malloc(sizeof(int)*10); //c++申请10个int的数组 int* pb = new int[10]; //c语言释放空间 free(pa); //c++释放空间 delete[] pb; //c语言申请1个int int* a = (int*)malloc(sizeof(int)); //c++申请1个int int* b = new int; //c语言释放空间 free(a); //c++释放空间 delete b; return 0;}
struct ListNode{ ListNode* _next; ListNode* _prev; int _val; ListNode(int val = 0) :_next(nullptr) , _prev(nullptr) ,_val(val) { cout << "ListNode(int val = 0" << endl; } ~ListNode() { cout << "ListNode()" << endl; }};int main(){ //c语言创建链表节点 struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode)); //free是直接释放空间 free(n1); //c++创建链表节点 ListNode* n2 = new ListNode(10); //delete 是先析构清理然后再释放空间 delete n2; return 0;}
注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。
struct ListNode{ ListNode* _next; ListNode* _prev; int _val; ListNode(int val = 0) :_next(nullptr) , _prev(nullptr) , _val(val) { cout << "ListNode(int val = 0" << endl; } ~ListNode() { cout << "ListNode()" << endl; }};int main(){ //c语言创建链表节点 struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode)); //free是直接释放空间 free(n1); //c++创建链表节点 ListNode* n2 = new ListNode[10]{1,2,3,4,5,6,7,8,9,0}; //delete 是先析构清理然后再释放空间 delete[] n2; return 0;}
边栏推荐
猜你喜欢
Beifu cx5130 card replacement and transfer of existing authorization files
Basic type of typescript
计算两点之间的距离(二维、三维)
Basic methods for network diagnosis and hardware troubleshooting of Beifu EtherCAT module
Echart stack histogram: add white spacing effect setting between color blocks
Included angle of 3D vector
[how to connect the network] Chapter 2 (middle): sending a network packet
Thinking caused by the error < note: candidate expectations 1 argument, 0 provided >
Common faults of MySQL database - forgetting database password
Reprint - easy to use wechat applet UI component library
随机推荐
Here Document免交互及Expect自动化交互
基于PyTorch的生成对抗网络实战(7)——利用Pytorch搭建SGAN(Semi-Supervised GAN)生成手写数字并分类
[how to connect the network] Chapter 2 (next): receiving a network packet
MySQL数据库讲解(五)
7-2 a Fu the thief
Luogu p3426 [poi2005]sza-template solution
Wechat applet - bind and prevent event bubble catch
Custom encapsulation drop-down component
Generate JDE dot train
Thinking caused by the error < note: candidate expectations 1 argument, 0 provided >
Wechat applet -picker component is repackaged and the disabled attribute is added -- above
A primary multithreaded server model
【系统分析师之路】第十五章 复盘数据库系统(数据库案例分析)
Mysql database explanation (III)
Generation and rendering of VTK cylinder
Update and download of Beifu EtherCAT XML description file
Taishan Office Technology Lecture: four cases of using bold font
7.Consul服务注册与发现
Original code, inverse code and complement code
Beifu PLC realizes data power-off maintenance based on cx5130