【面试实战】2024-08-22-面试总结

1. 讲讲内存管理

  • 栈和堆的区别
    ①栈和堆都是用来存储程序数据的内存区域。栈上的内存区域是有限的,栈用来存储局部变量和函数的调用信息。堆是一种动态分配的内存区域,用来存储程序运行时动态分配的数据。

    ②栈上变量的声明周期与所在函数的执行周期相同。而堆上变量的生命周期是由程序员显示的控制,由(mallocnew申请内存),(freedelete释放内存)。

    ③栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。

  • C++内存分区
    在这里插入图片描述



2. 什么是智能指针?有哪些种类?分别应用于哪些场景?

  • 🍎 智能指针用于管理动态内存的对象,其主要目的是避免内存泄露方便资源进行管理。

🐧①std::unique_ptr独占智能指针
std::unique_ptr 提供对动态分配的单一对象所有权的独占管理。通过独占所有权,确保只有一个。
std::unique_ptr可以拥有指定的内存资源。移动语义和右值引⽤允许std::unique_ptr 在所有权转移时高效地进⾏转移。

#include <memory>

std::unique_ptr<int> ptr = std::make_unique<int>(42);

🐧②std::shared_ptr (共享智能指针):
std::shared_ptr 允许多个智能指针共享同⼀块内存资源。内部使⽤引⽤计数来跟踪对象被共享的次数,当计数为零时,资源被释放。提供更灵活的内存共享,但可能存在循环引⽤的问题。

#include <memory>

std::shared_ptr<int> ptr1 = std::make_shared<int>(42);

std::shared_ptr<int> ptr2 = ptr1;

🐧③std::weak_ptr (弱引⽤智能指针):
std::weak_ptr ⽤于解决 std::shared_ptr 可能导致的循环引⽤问题。

std::weak_ptr 可以从 std::shared_ptr 创建,但不会增加引⽤计数,不会影响资源的释放。

通过 std::weak_ptr::lock() 可以获取⼀个 std::shared_ptr 来访问资源。

#include <memory>

std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);

std::weak_ptr<int> weakPtr = sharedPtr;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天进步1%~加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值