谁能看出下面代码的错误之处?重赏100分!
#include <iostream>
using namespace std;
//计数类
class cla_sp{
private:
friend class B;
int *p;
size_t use_count;
cla_sp(int *pa):p(pa),use_count(1){}
~cla_sp(){delete p;}
};
//B类
class B{
public:
B(int *p):ptr(new cla_sp(p)){}//构造函数
B(const B& orign):ptr(orign.ptr){ ++ptr->use_count;//复制构造函数
cout<<"copy constructor"<<endl;}
B& operator=(const B&rB);//赋值操作符
~B(){if(--ptr->use_count==0) delete ptr;//析构函数
cout<<"destructor"<<endl;}
int get_p_val(){return *ptr->p;}
void set_p_val(int i){*ptr->p=i;}
size_t get_useCount(){return ptr->use_count;}
private:
cla_sp* ptr;
};
B& B::operator=(const B& rB){
++rB.ptr->use_count;
if(ptr->use_count==0)
delete ptr;
ptr=rB.ptr;
cout<<"operator="<<endl;
return *this;
}
int main(void)
{
int a=1;
B b1(&a);
B b2(b1);
B b3=b1;
cout<<b2.get_useCount()<<endl;
cout<<b2.get_p_val()<<endl;
return 0;
}