C++智能指针

1、shared_ptr允许多个指针指向同一个对象(同一块内存空间),unique_ptr独占所指向的对象

class A
{
public:
	A(int a)
	{
		m_a = a;
	}
private:
	int m_a;
};

shared_ptr<A> p1 = std::make_shared<A>(10);
cout << "p1的count:" << p1.use_count() << endl;
shared_ptr<A> p2 = std::make_shared<A>(10);	// p2重新分配新的内存地址,和p1指向的不是同一个对象,p1的引用计数仍为1
cout << "p1的count:" << p1.use_count() << endl;
shared_ptr<A> p3 = p1;		// p3和p2指向同一块内存空间,指向同一个对象
cout << "p1的count:" << p1.use_count() << endl;

分别输出:
1
1
2

2、shared_ptr和unique_ptr都支持的操作:

shared_ptr<T> sp    // 空智能指针,sp = nullptr
unique_ptr<T> up
p     // 如果p指向一个对象,则为true
*p    // 获得p指向的对象
p.get()    // 返回普通指针
swap(p, q)    // 交换p和q中的指针,交换p和q中保存的内存地址

3、shared_ptr的引用计数

如果shared_ptr指向的对象的引用计数变为0,shared_ptr的析构函数会销毁对象,并释放内存空间。

4、使用了动态生存期的资源的类(类里含有shared_ptr成员变量)

1种原因是需要在多个对象间共享数据;

使用动态内存的1个常见原因是允许在多个对象间共享相同的状态

当我们拷贝、赋值、销毁一个类对象时,它的shared_ptr成员也会被拷贝、赋值和销毁。

5、unique_ptr特性

某个时刻只能有一个unique_ptr指向一个对象,unique_ptr不支持普通的拷贝和赋值操作。

6、unique_ptr支持的操作

unique_ptr<T> u1;    // 一个空指针
u = nullptr          // 释放u指向的对象,将u置为空
u.release();         // 为了转移所有权。返回指向内存的普通指针,并将u置为空
u.reset();           // 释放u指向的对象
u.reset(q);          // 令u指向q指向的对象,否则u置空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值