1、静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量
2、栈内存用来保存定义在函数内的非static对象。分配在静态或栈内存中的对象由编译器自动创建和销毁
3、堆内存,存储动态分配的对象
4、两种智能指针shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指向的对象。
标准库中定义的一个名为week_ptr的伴随类,一种弱引用,指向shared_ptr所管理的对象。都定义在memory头文件
5、shared_ptr和unique_ptr都支持的操作
【1】shared_ptr<T>sp 空只能指针,指向类型为T的对象
【2】unique_ptr<T>up
【3】p p用作条件判断,若p指向一个对象,则为true
【4】*p 解引用、获取它指向的对象
【5】p->mem 等价于(*p).mem
【6】p.get() 返回p中保存的指针 ,若智能指针释放了其对象,返回的指针所指向的对象也就消失了
【7】swap(p,q) 等价p.swap(q)交换p和q指针
6、shared_ptr独有的操作
【1】make_shared<T>(args) 返回一个shared_ptr,指向一个动态分配的类型为T的对象。使用args初始化此对象
【2】shared_ptr<T>p(q) p是q的拷贝;递增q中的计数器、q中的指针鼻血能转化为T*
【3】p=q p和q都是shared_ptr,所保存的指针必须能相互转化。递增q中的计数器,递减p中的计数器.p的引用计数为0,释放内存
例如:auto r = make_shared<int>(42);
r = q ; //给r赋值,指向另一个地址;
//递增q指向的对象的引用计数;
//递减r原来指向的对象引用计数
//r原来指向的对象没有引用者,自动释放
【4】p.unique() 若p.use_count()为1,返回true、否则返回false
【5】p.use_count() 返回与p共享对象的智能指针数量;主要用于调试
2、栈内存用来保存定义在函数内的非static对象。分配在静态或栈内存中的对象由编译器自动创建和销毁
3、堆内存,存储动态分配的对象
4、两种智能指针shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指向的对象。
标准库中定义的一个名为week_ptr的伴随类,一种弱引用,指向shared_ptr所管理的对象。都定义在memory头文件
5、shared_ptr和unique_ptr都支持的操作
【1】shared_ptr<T>sp 空只能指针,指向类型为T的对象
【2】unique_ptr<T>up
【3】p p用作条件判断,若p指向一个对象,则为true
【4】*p 解引用、获取它指向的对象
【5】p->mem 等价于(*p).mem
【6】p.get() 返回p中保存的指针 ,若智能指针释放了其对象,返回的指针所指向的对象也就消失了
【7】swap(p,q) 等价p.swap(q)交换p和q指针
6、shared_ptr独有的操作
【1】make_shared<T>(args) 返回一个shared_ptr,指向一个动态分配的类型为T的对象。使用args初始化此对象
【2】shared_ptr<T>p(q) p是q的拷贝;递增q中的计数器、q中的指针鼻血能转化为T*
【3】p=q p和q都是shared_ptr,所保存的指针必须能相互转化。递增q中的计数器,递减p中的计数器.p的引用计数为0,释放内存
例如:auto r = make_shared<int>(42);
r = q ; //给r赋值,指向另一个地址;
//递增q指向的对象的引用计数;
//递减r原来指向的对象引用计数
//r原来指向的对象没有引用者,自动释放
【4】p.unique() 若p.use_count()为1,返回true、否则返回false
【5】p.use_count() 返回与p共享对象的智能指针数量;主要用于调试
本文介绍了C++中的内存分配,包括静态内存、栈内存和堆内存的使用。重点讨论了智能指针shared_ptr和unique_ptr,详细阐述了它们的功能、操作方式以及在动态内存管理中的作用。此外,还提到了weak_ptr作为shared_ptr的辅助类型,用于弱引用。文章通过实例展示了如何使用make_shared、拷贝、赋值等操作,并提醒读者注意智能指针的引用计数管理和内存释放。

3062

被折叠的 条评论
为什么被折叠?



