c++学习笔记 智能指针注意事项

1.当用了裸指针给智能指针赋值之后,就不应该再使用裸指针了。

2.不能用一个裸指针同时给多个智能指针初始化,这会使得每一个强引用计数都是1.

3.通过get获得的裸指针不能再绑到其他的智能指针上,道理同2

4.若一个智能指针已经指在类对象上了,不能通过类对象的this指针返回一个智能指针,道理同2.需要将类继承自enable_shared_from_this<>.并使用shared_from_this来返回绑定到此对象的智能指针

class A:public enable_shared_from_this<A>
{
public:
	A()
	{
		cout << "构造函数" << endl;
	}
	A(const A& temp)
	{
		cout << "拷贝构造函数" << endl;
	}
	~A()
	{
		cout << "析构函数" << endl;
	}
	shared_ptr<A> getself()
	{
		return shared_from_this();
	}
};

5.若存在两个类,其中A类中有指向B类的智能指针,B类中有指向A类的智能指针。先定义两个智能指针分别指向两个类,再将每个对象中的指针指向另一个对象。此时如果两个指针若被析构或者指向其他对象,会导致内存泄漏。

class B;
class A
{
    public:
    shared_ptr<B> m_a;
};

class B
{
    public:
    shared_ptr<A> m_b;
};

int main()
{
    shared_ptr<A> p1(new A());
    shared_ptr<B> p2(new B());
    p1->m_a = p2;
    p2->m_b = p1;
}

解决办法:将两个类中的任意一个类的shared_ptr更改为weak_ptr

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值