摘要:
# 13.请说一下以下几种情况下,下面几个类的大小各是多少? ```C++ class A {}; int main() { cout << sizeof(A) << endl;// 输出 1; A a; cout << sizeof(a) << endl;// 输出 1; return 0; } 阅读全文
摘要:
# 12.你知道空类的大小是多少吗? 1.C++空类的大小不为0,不同编译器设置不一样,vs设置为1 2.C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址 3.带有虚函数的C++类大小不为1,因为每一个对象会有一个vptr指向虚函数表,具体大小根据指针大小确定 阅读全文
摘要:
# 11.如果在类的析构函数中调用delete this,会发生什么? 会导致堆栈溢出。原因很简单,delete的本质是“为将被释放的内存调用一个或多个析构函数,然后,释放内存”。显然,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢 阅读全文
摘要:
# 10.为什么是不可预期的问题? delete this之后不是释放了类对象的内存空间了么,那么这段内存应该已经还给系统,不再属于这个进程。照这个逻辑来看,应该发生指针错误,无访问权限之类的令系统崩溃的问题才对啊?这个问题牵涉到操作系统的内存管理策略。delete this释放了类对象的内存空间, 阅读全文
摘要:
# 9.在成员函数中调用delete this会出现什么问题?对象还可以使用吗? 在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数单独放在代码段中。在调用成员函数时,隐含传递一个this指针,让成员函数知道当前是哪个对象在调用它。当调用delete this时,类对象 阅读全文
摘要:
# 8.内存泄漏的后果?如何监测?解决方法? ## 1.内存泄漏 ### 1.1定义 内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制; ### 1.2种类 #### 1.2.1C/C 阅读全文
摘要:
# 7.几个this指针的易混问题 见[6.类的*this指针有以下特点](https://www.cnblogs.com/codemagiciant/p/17601868.html) 阅读全文
摘要:
## 6.类的\*this指针有以下特点 #### 1.每个对象都有一个隐藏的this指针,但不属于对象,是编译器添加的 #### 2.this只能在成员函数中使用。全局函数、静态函数都不能使用this。 实际上,成员函数默认第一个参数为T \*const this。 如: ``` class A 阅读全文
摘要:
# 5.C++中类的数据成员和成员函数内存分布情况 - 非静态成员的数据类型大小之和。 - 编译器加入的额外成员变量(如指向虚函数表的指针)。 - 为了边缘对齐优化加入的padding。 空类(无非静态数据成员)的对象的size为1, 当作为基类时, size为0。 C++类是由结构体发展得来的,所 阅读全文
摘要:
# 4.可以说一下你了解的C++得内存管理吗? ## 1.一个由c/C++编译的程序占用的[内存](https://so.csdn.net/so/search?q=内存&spm=1001.2101.3001.7020)分为以下几个部分: C++中的内存分区,分别是堆、栈、自由存储区、全局/静态存储区 阅读全文