cpp知识点

一、八股文

1、虚析构函数

在设计一个可能会被继承的类时,一般都会将其析构函数设为虚函数,以确保当派生类对象被删除时,首先调用派生类的析构函数,然后再调用基类的析构函数,从而避免资源泄漏
如果Base的析构函数是虚函数,那么在删除b时,首先会调用Derived的析构函数,然后是Base的析构函数,而如果Base的析构函数不是虚函数,那么只会调用Base的析构函数。

构造函数是一种特殊的成员函数,它会在创建类的对象时自动调用。主要的用途是进行初始化工作。例如,在创建对象时,可能需要初始化一些数据成员,设置某些特定的默认值等等。构造函数的名称和类的名称相同,并且它没有任何返回类型。根据参数不同,构造函数可分为默认构造函数(无参)、有参构造函数和拷贝构造函数三种。
析构函数也是一种特殊的成员函数,它会在类的对象生命周期结束时(例如,对象出作用域,或者被delete)自动调用。它的主要任务是清理工作,如释放动态分配的内存,关闭文件等。析构函数的名称是在类名前面加上一个波浪符~,并且没有参数,也没有返回值。

虚函数是通过在类内部的成员函数前面添加关键字virtual来声明的。其主要用于实现多态。如果一个函数在基类中被声明为虚函数,则在任何派生类中都可以重新定义。当通过基类指针或引用访问这个虚函数时,将会调用该指针或引用所指向对象(可能是基类,也可能是派生类)的版本。这种决定在运行时刻进行的过程就叫做动态绑定。
**纯虚函数:**一个虚函数如果在基类中没有定义,只有声明,那么这个虚函数就是纯虚函数。纯虚函数使用= 0在虚函数的声明中表达。这告诉编译器虚函数在基类中没有定义,必须在任何直接的非抽象派生类中定义。这样的类被称为抽象类,并且不能实例化。抽象类主要是用作接口和其它类的基类。

2、unique_ptr

是C++11中引入的一个智能指针类型,它的主要目的是管理动态分配的内存资源,避免内存泄露。std::unique_ptr 是一种独占所有权的智能指针,即在任何时候,一个特定的对象只能被一个std::unique_ptr 所拥有。
1、自动删除所管理的对象:当std::unique_ptr 离开其作用域时,其析构函数会自动调用delete 或delete[] 来删除所管理的对象,所以不需要程序员手动释放内存。

2、不能复制,但可以移动:因为std::unique_ptr 独占所有权,所以C++禁止两个 std::unique_ptr 指向同一对象,即不能进行复制操作。但可以进行移动操作,即可以从一个std::unique_ptr 将所有权转移给另一个 std::unique_ptr。
使用std::unique_ptr 可以减轻手动管理内存的负担,使得代码更安全,更不容易出错和更容易理解。

3、释放指针内存

在C++程序中,当使用new关键字动态分配内存后,需要通过delete关键字来释放这块在C++中,当你用new运算符动态分配内存后,可以使用delete运算符来释放该内存。在释放内存后,一般推荐将指向该内存的指针设置为nullptr。主要有以下几个原因:

  • 1、防止野指针:野指针是指向"垃圾"内存(之前已删除的内存或未分配的内存)的指针。如果你的代码使用了一个指向已删除内存的指针,程序可能会出现未定义行为。把指针设为nullptr可以防止这种情况的发生。
  • 2、支持对删除操作的反复调用:C++的delete运算符允许对nullptr进行操作,如果两次对同一个指针执行delete操作,程序将会崩溃。如果你在每次delete后都把指针设为nullptr,你的代码就能安全地进行多次delete操作。
  • 3、提升代码的健壮性:清楚知道一个指针是否已经指向一个有效的内存区域可以帮助提升代码健壮性,避免内存相关的错误。

这里需要注意的是,在一个作用域结束后,局部指针将会自动 destruct,但指针所指向的动态内存不会被自动释放。因此,一般习惯在不再使用动态内存后立即 delete 掉,避免造成内存泄漏。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值