指针与引用,内存管理

一、C++指针与引用的区别

1.引用是否占用内存地址?

        实际上也是占用的,内存中存储的是其指向变量的内存地址,只不过访问这块内存时编译器将直接转而访问其指向的内存。因此在程序中无法读取到这块内存本身。

C++变量的引用是否占用内存空间_引用占用内存空间吗-CSDN博客

2.在函数参数传递、操作符重载的时候为什么要使用引用?

在重载操作符时,为了避免不必要的对象拷贝和提高性能,通常会使用引用而不是直接传入变量名。这是因为直接传入变量名会导致实参和形参之间发生对象的复制,特别是在操作大型对象时,会造成不必要的性能开销和内存消耗。

二、C++内存管理

1.栈内存与堆内存

C语言中堆与栈的区别_c语言中堆和栈的区别-CSDN博客

栈内存由编译器自动管理,堆内存由程序员显示控制。

栈内存的大小是有限的,通常在几兆字节到数百兆字节之间,具体大小取决于编译器和操作系统。堆内存的大小通常比栈内存大得多,并且没有固定的限制。但是,不合理地使用堆内存可能会导致内存泄漏或者内存碎片问题。

2.C++内存分区

2.1 静态变量与常量的区别

静态变量static只能被初始化一次。作用范围取决于他被初始化的位置。但在函数运行结束后,静态变量的内存不释放。在程序运行过程中可以被修改。内存位置位于全局/静态区。

常量不可被修改。内存位置位于常量区。

3.内存泄漏

 

3.1 构造函数与析构函数可以是虚函数吗?

构造函数不可以是虚函数。因为虚函数是在对象构建完成后才可以使用。(简单说法)

析构函数必须是虚函数,否则会出现父类内存被释放、子类内存没有被释放的情况,有内存泄漏的危险。

C++构造函数和析构函数可以是虚函数吗 - 知乎 (zhihu.com)

4.智能指针

智能指针⽤于管理动态内存的对象,其主要⽬的是在避免内存泄漏和⽅便资源管理。

其定义了管理指针的对象,可以将new 获得(直接或间接)的地址赋给这种对象。当对象过期时,其析构函数将使用delete 来释放内存!

分为独占智能指针,共享智能指针,弱引用智能指针。

独占智能指针一个指针单独管理一个内存,共享智能指针多个指针共享一个内存,可能会用循环引用的问题。弱引用智能指针可以解决循环引用问题。

弱引用智能指针可以解决循环引用的原因是共享智能指针会记录指向变量被共享的次数,并且每有一个共享智能指针指向该变量,该变量被共享的次数就+1,而弱引用智能指针指向该变量时不会使该变量的被共享次数+1.

5.new与malloc的区别

6.delete 和 free 有什么区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值