当前位置:网站首页>虫子 内存管理 上
虫子 内存管理 上
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;}
边栏推荐
- Zero basics of C language lesson 7: break & continue
- Basic type of typescript
- 古瑞瓦特沖刺港交所上市:創下“多個第一”,獲IDG資本9億元投資
- Exercise set 1
- Design of simple digital circuit traffic light
- Original code, inverse code and complement code
- Es common grammar I
- Here Document免交互及Expect自动化交互
- [how to connect the network] Chapter 2 (Part 1): establish a connection, transmit data, and disconnect
- GO语言-管道channel
猜你喜欢

Lamp compilation and installation

Variable declaration of typescript

ES基于Snapshot(快照)的数据备份和还原

Network remote access using raspberry pie

Firewall introduction

Zero basics of C language lesson 8: Functions

Gurivat sprint Harbour Exchange listed: created “multiple first”, received 900 million yuan Investment from IDG capital

防火墙介绍

ES6 module
![[how to connect the network] Chapter 2 (middle): sending a network packet](/img/5f/602c59d3a7ee1154c7410fb2fcfc41.png)
[how to connect the network] Chapter 2 (middle): sending a network packet
随机推荐
Lamp compilation and installation
DataGrip配置的连接迁移
嵌入式virlog代码运行流程
【系统分析师之路】第十五章 复盘数据库系统(数据库案例分析)
CloudCompare——泊松重建
Basic type of typescript
Awk tools
33、使用RGBD相机进行目标检测和深度信息输出
[path of system analyst] Chapter 15 double disk database system (database case analysis)
Beifu PLC obtains system time, local time, current time zone and system time zone conversion through program
Wechat applet -picker component is repackaged and the disabled attribute is added -- above
Mysql database explanation (V)
Global variable vs local variable
[how to connect the network] Chapter 2 (middle): sending a network packet
LeetCode_ Stack_ Medium_ 150. evaluation of inverse Polish expression
Go language - pipeline channel
Solutions to the failure of last child and first child styles of wechat applet
三维向量的夹角
tauri vs electron
遍历指定目录获取当前目录下指定后缀(如txt和ini)的文件名













