C++内存机制学习---4.20

1. C++中的内存分布?
2. 在成员函数中调用delete this会出现什么问题呢?对象还可以使用吗?
3. 如果在类的析构函数调用delete this会出现什么问题?
4. 类对象的内存大小手那些因素影响?

1. 包括堆、栈、全局/静态变量区、常量区、代码区;在执行函数的时候,函数内部变量的存储单元可以在栈上创建,函数执行结束时这些存储单元自动释放。堆区是由用户采用new创建并使用delete释放,需要人为手动释放,如果忘记,可能会造成内存泄漏;全局/静态变量区一般存储全局的变量和由static声明的变量;常量区指的是不可以更改的变量;代码区存放程序的二进制代码;

2. 在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数单独放在代码段中。调用了delete this指针后,会将类对象的内存空间释放;后续只要不要涉及到this指针的内容,都能够正常运行;

3. 会导致堆栈溢出;因为会反复调用本对象的析构函数,导致无限循环;

4. 类的非静态成员变量大小;内存对齐另外分配的空间大小;拥有虚函数的话,会在类对象中插入vptr指针;如果该类是派生类的话,会继承基类部分的数据成员;
全部评论

相关推荐

评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客企业服务