由于我个人仍在学习当中,所学内容可能较为零散不成体系更多是以学习时间记录而非内容体系记录,所写可能也因此显得有些杂乱无章,当我建立起一个较为完整的知识体系框架后也许会回来整理吧。

所记录的问题可能来自我网上冲浪所见或面试所遇我认为值得记录学习的,回答可能来自于网络资料、各路大模型回答以及一些我个人的理解,可能准确率并不太高,若有错漏还望不吝赐教。

智能指针

引用计数概念防止内存泄露。

基本想法:对于动态分配的对象进行引用计数每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次, 每删除一次引用,引用计数就会减一,当一个对象的引用计数减为零时,就自动删除指向的堆内存。

c++11引入智能指针概念,包含std::shared_ptr/std::unique_ptr/std::weak_ptr,头文件为<memory>

shared_ptr

可自动记录有多少个shared_ptr共同指向同一对象,当计数归零时自动释放对应对象内存

std::make_shared<T> (Args&&... args); // 创建对应对象并返回其指针

.get(); // 获得原始指针
.use_count(); // 查看对象引用计数
auto p = ptr.get(); // 不会增加计数
auto p = ptr; // 会增加计数

.reset(); // 置空

unique_ptr

独占的智能指针, 禁止其他智能指针与其共享同一个对象

cpp11没有提供std::make_unique, cpp委员会说是忘记了

unique_ptr 用法shared_ptr与类似,但无法通过赋值拷贝给另一智能指针,但可以通过std::move将其转移给另一unique_ptr

同时还可以通过.get()获取其原始指针后直接赋值给普通指针,但这样显然并不安全。