BOOST库学习之智能指针

前言

本次笔记记录如下知识点

  1. 智能指针的原理
  2. unique_ptr的原理及作用
  3. shared_ptr的原理及作用
  4. weak_ptr的原理及作用

一、智能指针的原理

  • 智能指针的产生:在C++中程序员为了提高程序的效率,对堆内存管理会非常的频繁,为了不造成堆内存泄露,所以使用智能指针可以更好的管理堆内存。
  • 智能指针的原理:智能指针是一个类,这个类中会在构造函数中传入一个普通的指针,在析构中释放这个指针。智能指针的类是栈上的对象,智能指针指向堆上开辟的空间,函数结束时,栈上的函数会自动被释放,智能指针指向的内存也会随之消失,防止内存泄漏。

二、unique_ptr的原理及作用

1、unique_ptr的作用
  • unique_ptr唯一拥有其所指向的对象,同一时刻,unique_ptr独占所指对象。不能拷贝构造和拷贝赋值,支持转移语义。
2、unique_ptr的实现原理
  • unique_ptr本质上是一个类,只是可以像一个指针一样使用,首先释放指针内存这个操作我们可以在析构函数中进行delete的操作,之后可以在类中把拷贝构造函数和拷贝赋值声明为private,这样就不可以对指针指向进行拷贝了,从而实现了独占的方式。

代码实现示例如下

template <class T,class D = default_delete<T>>
class unique_ptr {
   
public:
	//保存传入的指针
	typedef some_define  pointer;
	typedef T			 element_type;
	//构造函数
	concept		unique_ptr() noexcept;
	explicit	unique_ptr(pointer p) noexcept;
	//析构函数
	~unique_ptr();
	//转移语义赋值
	unique_ptr& operator=(unique_ptr&& u) noexcept;
	//获取原始指针
	pointer     get() const noexcept;
	//释放指针的管理权
	pointer     release() noexcept;
	//禁止拷贝
	unique_ptr(const unique_ptr&)				=	delete;
	unique_ptr&	operator=(const unique_ptr&)	=	delete;
};
3、unique_ptr中的使用

代码示例如下

#include <vector>

class Example
{
   
public:
	Example(int param = 0)
	{
   
		number = param;
		cout << "Example: " << number << endl;
	}

	~Example() {
    cout << "~Example: " << number << endl; }

	void test_print() {
    cout << "in test print: number = " << number << endl; }

	void set_number(int num) {
    number = num; }

private:
	int number;
};


int main()
{
   
	//1、测试unique_ptr中的各种函数
	unique_ptr<Example> ptr(new Example(1));
	ptr.get()->test_print();			//获取指针打印结果
	ptr->set_number(10);				//设置值
	ptr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值