C++之智能指针
文章目录
- 一:智能指针
- 1:智能指针类型
- 2:shared_ptr
- 3:weak_ptr
- 3.1环形依赖
- 3.2 weak_ptr
- 4:unique_ptr
- 4.1 get(),release()和move()
- 4.2 转移控制权
- 4.3 在函数间传递unique_ptr
- 4.3.1 只需要value
- 4.3.2 传递unique_ptr
- 4.4 作为函数返回值
一:智能指针
1:智能指针本身:智能指针是一个类模板的实例,通常作为局部变量存在于栈区(Stack)。当函数返回或者局部变量超出其作用域时,栈区的内存会被自动释放。
(图片来源网络,侵删)2:智能指针管理的对象:智能指针通常用来管理在堆区(Heap)上分配的内存。这是通过调用如new操作符来完成的。堆区的内存会一直存在,直到显式地释放它(使用delete操作符)或者当程序结束时才会被系统回收。
- c++对于普通的new或者malloc分配空间,需要及时的释放空间,否则容易造成内存泄漏,导致堆区空间不足。但是,随着代码量的增多,很容易忘记释放空间,于是智能指针应运而生。
- 智能指针会自动释放。省去手动管理内存。在智能指针中,会存在一个计数器,计数器的大小等于指向对象的智能指针的数量,当计数为0时,则释放指针。
- 智能指针在memory头文件中
1:std::unique_ptr:它实现了对对象的独占所有权语义。这意味着一个unique_ptr在任何时候都指向一个对象,而且这个对象只能由一个unique_ptr拥有。当unique_ptr被销毁(例如离开其作用域)时,它所指向的对象也会被自动删除。
2:std::shared_ptr:它实现了对象的共享所有权语义。多个shared_ptr可以指向同一个对象,并且每个shared_ptr持有一个引用计数。当最后一个指向某个对象的shared_ptr被销毁或重置时,该对象才会被删除。
3:std::weak_ptr:它是对shared_ptr所管理对象的一个非拥有性引用,它指向一个由shared_ptr管理的对象,但并不影响对象的生命周期。也就是说,它不会增加所指向对象的引用计数。当最后一个指向对象的shared_ptr被销毁时,无论是否还有weak_ptr指向该对象,对象都会被删除。weak_ptr主要用于解决shared_ptr可能导致的循环引用问题。
在这部分利用率局部变量的特性,C++的局部变量存在栈中,当变量的生命周期结束后,那栈会自动释放空间。而智能指针同样为局部变量,存在栈中。
//很简单的一个类,帮助解释智能指针 class Ball { public: Ball() { cout cout cout new int(100)}; //使用方式,和普通指针一样 shared_ptr}; shared_ptr string name; int age; shared_ptr cout string name; shared_ptr cout auto principle = make_shared weak_ptr cout cout cout auto up = make_unique cout auto up = make_unique cout auto up = make_unique cout auto up = make_unique unique_ptr unique_ptr
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。