share_ptr

1、为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0。这就出现了,copy构造或者copy赋值后,两个对象不相等了。

2、auto_ptr的问题就是,一块内存只能有一个指针指向它,为了解决这个问题,使用share_ptr。

3、share_ptr是如何实现的?

  a、内部有一个指向原始资源的指针。

  b、内部维护一个share_count,记录有多少个指针指向该内存。

  c、析构的时候,share_count>1,将计数减1;share_count==1释放内存。

  d、考虑到每个share_ptr中都有一个自己的share_count,而且还要保证这个数一致,应该这样做:先对原始资源封装,加入share_count,成为带有count的资源,share_count在对它封装,这样就可以只有一个share_count了。

  e、copy构造的时候,lhs的指针指向rhs的资源,share_count加1。

  f、copy赋值的时候,先检查左操作数原来的资源是否可以释放,lhs的指针指向rhs的资源,share_count加1。

你可能感兴趣的:(sha)