文章目录
- 1. 讲讲内存管理
- 2. 什么是智能指针?有哪些种类?分别应用于哪些场景?
1. 讲讲内存管理
-
栈和堆的区别:
①栈和堆都是用来存储程序数据的内存区域。栈上的内存区域是有限的,栈用来存储局部变量和函数的调用信息。堆是一种动态分配的内存区域,用来存储程序运行时动态分配的数据。②栈上变量的声明周期与所在函数的执行周期相同。而堆上变量的生命周期是由程序员显示的控制,由(
malloc
、new
申请内存),(free
、delete
释放内存)。③栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。
-
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;