C++内存机制学习---4.20
1. C++中的内存分布?
2. 在成员函数中调用delete this会出现什么问题呢?对象还可以使用吗?
3. 如果在类的析构函数调用delete this会出现什么问题?
4. 类对象的内存大小手那些因素影响?
1. 包括堆、栈、全局/静态变量区、常量区、代码区;在执行函数的时候,函数内部变量的存储单元可以在栈上创建,函数执行结束时这些存储单元自动释放。堆区是由用户采用new创建并使用delete释放,需要人为手动释放,如果忘记,可能会造成内存泄漏;全局/静态变量区一般存储全局的变量和由static声明的变量;常量区指的是不可以更改的变量;代码区存放程序的二进制代码;
2. 在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数单独放在代码段中。调用了delete this指针后,会将类对象的内存空间释放;后续只要不要涉及到this指针的内容,都能够正常运行;
3. 会导致堆栈溢出;因为会反复调用本对象的析构函数,导致无限循环;
4. 类的非静态成员变量大小;内存对齐另外分配的空间大小;拥有虚函数的话,会在类对象中插入vptr指针;如果该类是派生类的话,会继承基类部分的数据成员;
2. 在成员函数中调用delete this会出现什么问题呢?对象还可以使用吗?
3. 如果在类的析构函数调用delete this会出现什么问题?
4. 类对象的内存大小手那些因素影响?
1. 包括堆、栈、全局/静态变量区、常量区、代码区;在执行函数的时候,函数内部变量的存储单元可以在栈上创建,函数执行结束时这些存储单元自动释放。堆区是由用户采用new创建并使用delete释放,需要人为手动释放,如果忘记,可能会造成内存泄漏;全局/静态变量区一般存储全局的变量和由static声明的变量;常量区指的是不可以更改的变量;代码区存放程序的二进制代码;
2. 在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数单独放在代码段中。调用了delete this指针后,会将类对象的内存空间释放;后续只要不要涉及到this指针的内容,都能够正常运行;
3. 会导致堆栈溢出;因为会反复调用本对象的析构函数,导致无限循环;
4. 类的非静态成员变量大小;内存对齐另外分配的空间大小;拥有虚函数的话,会在类对象中插入vptr指针;如果该类是派生类的话,会继承基类部分的数据成员;
全部评论
相关推荐
11-03 16:23
门头沟学院 前端工程师 只会按tab的bug...:他问你爱好的话 就不要聊文学作品了(可以和我聊
)你可以说说平时喜欢逛什么技术网站什么的 或者喜欢打游戏 喜欢看小红书和b站的视频 然后研究研究他们的产品什么的 尽量往互联网上面靠 这样的话她可能会问你这些产品里面你觉得做的最好的前端交互是哪个 你可以准备准备这个问题 这样比较有的聊
查看12道真题和解析 点赞 评论 收藏
分享


海康威视公司福利 1175人发布