C++笔试易错题总结(类的动态内存分配)

1、静态成员变量:无论创建多少对象,程序都只创建一个静态类变量副本。(通常可用于记录创建对象的个数等)。不能再类声明张红初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。可以再类外(不要再头文件中)使用单独语句来进行初始化。例外情况是静态成员是整型或枚举型const

2、对象生存期结束时,new左边的指针过期,但是new分配内存并没有被释放,必须使用delete。(使用new[] 分配的内存应使用delete[] 释放)

3、C++自动提供的成员函数有:默认构造函数、默认析构函数、复制构造函数、赋值运算符(一个对象赋值给另一个对象)、地址运算符(返回调用对象的地址,即this指针的值)。

4、带参数的构造函数也可以是默认构造函数,只要所有参数都有默认值。默认构造函数只能有一个。

5、调用复制构造函数的四种情况(假设std位一个Student对象):(1)Student std1(std);(2)Student std1 = std;(3)Student std3 = Student(std);(4)Strudent * std4 = new Student(std);最后一种跟当时使用std初始化一个匿名对象,并将新对象的地址付给std4指针。

6、每当程序生成了对象副本时,编译器都将使用复制构造函数(如按值传递对象或函数返回对象),所以对象按引用传递可以节省调用构造函数的时间以及存储新对象的空间。

7、隐式复制构造函数是按值进行复制的(不复制静态成员),如 A.m = B.m,假设这里的创建的临时变量为C。因此若m为指针则调用析构函数释放临时变量C时会导致错误。错误有两点:(1)原本B中m所指向的内存被释放。(2)在B调用析构函数时会导致双重释放内存的错误。应定义一个显式的复制构造函数避免指针复制的问题。

8、如果类中包含使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,这被成为深度复制。(浅复制仅复制指针信息)

9、string 的原型为类,之所以string[i] 可以得到相应字符是因为类中重载了[] 运算符。

10、c++中的函数重载区分常量和非常量函数的特征标。

11、不能通过对象调用静态成员函数,静态成员不能使用this指针,若静态成员在共有部分声明,可以使用类名和作用域解析运算符调用。

12、静态成员函数不与特定的对象相关联,因此只能使用静态数据成员。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值