智能指针(待更)
Last edited time
Sep 17, 2024 10:58 AM
AI summary
智能指针的内容涉及指针与引用的区别,包括引用必须初始化、不能改变指向、指针可以多级而引用只能一级,以及指针传递和引用传递的本质差异。
Last edited by
Tags
- 指针和引⽤的区别
- 引⽤必须定义时初始化,不能像指针⼀样仅 int*a;这样定义,必须 int & b=a;
- 引⽤不能改变指向,引⽤就是个指针常量
- 指针可以有多级但引⽤只能有⼀级,有 int, 但是没有 int&&
- 指针传递的本质是值传递复制实参的地址到函数的栈中,然后在形参中对地址取值操作。⽽引⽤的形参是给实参起了⼀个别名,可以直接操控形参从⽽实现对实参的控制。
- 智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。标准库提供的两种智能指针的区别在于管理底层指针的方法不同,shared_ptr允许多个指针指向同一个对象,unique_ptr则“独占”所指向的对象。标准库还定义了一种名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象,这三种智能指针都定义在memory头文件中。
shared_ptr(多个指针指向同一个对象,多对一)
必须提供额外的信息,指针指向的类型,例:
判断它是否为空:
unique_ptr(一个指针指向一个对象,一对一)
make_shared函数:
最安全的分配和使用动态内存的方法就是调用一个名为make_shared的标准库函数,此函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。头文件和share_ptr相同,在memory中,必须指定想要创建的对象的类型,例:
Loading...