C++基础问题总结

这篇博客总结了C++的基础问题,包括空类的sizeof值(总是为1),拷贝构造函数的作用及避免无限递归的注意事项,单例模式的实现与线程安全,lambda函数的概念和用法,以及智能指针在内存管理中的应用,旨在帮助读者深入理解C++的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 空类的sizeof值

  • 对于无成员函数,无成员变量的空类,其sizeof值为1. 虽然没有成员占内存,但必须在内存中占一定空间,由编译器决定(VS)。
  • 在空类中添加函数,其sizeof还是1。因为实例中不储存类函数相关内容,只通过函数地址调用。
  • 若有虚函数,则会为类生成虚函数表。在实例中添加指向虚函数表的指针。因此占一个指针的空间。

2. 拷贝构造函数

拷贝构造函数的形参不能是同类对象,要加const &
因为在形参传值的过程中,会有复制实例的过程,递归调用拷贝构造函数,这样会发出无限递归,导致栈溢出。

A(A a) {}; // wrong
A(const A& a) {}; // right

3. 单例模式

  1. 使用共有方法获取实例
  2. 成员变量静态,初始未null, get里判断,为null初始化
  3. 加同步锁,在初始化外使用 // 放置多线程时初始化多个实例
  4. 同步锁外再次判断是否为null // 放置多次用锁降低效率

4. lambda函数

又称匿名函数。因为不作为一个函数单独出现,没有名字。
如:

auto getAbd=[](float n)-> int {return abs(n);}(-3.5);
// 3.5

函数功能:返回int类型的绝对值。
[]为标识符;后接()为形参;后接-> int可选,为指定返回值类型,若不指定,则自动推断,这里存在一个强制转换。所以一般最前用auto;后接{}为函数体;后接()为实参。

5. 智能指针

用于管理内存,能够自动释放内存,避免内存泄漏。
是一个模板,创建时需要声明指针类型。

  • shared_ptr:多个指针指向一个对象
  • unique_ptr:一个指针指向一个对象
    使用make_shared在动态内存中分配一个对象并初始化,返回动态指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值