c++primer中的使用计数,我用静态数据成员能不能代替它?
#include<iostream>
using namespace std;
class HasPtr
{
private:
static size_t use; //用静态成员代替使用计数
int *p;
int val;
public:
static size_t get_use();
HasPtr(int *ip, int ival):p(new int(*ip)), val(ival){}
HasPtr(const HasPtr& obj):p(obj.p), val(obj.val) //只要对象被复制或者赋值都使use++
{
use++;
}
~HasPtr();
HasPtr& operator=(const HasPtr& obj);
};
size_t HasPtr::use = 1;
size_t HasPtr::get_use()
{
return use;
}
HasPtr::~HasPtr ()
{
if(--use == 0) //如果只有一个对象中的p指向基础对象就删除p
delete p;
}
HasPtr& HasPtr::operator = (const HasPtr& obj)
{
use++;
p = obj.p;
val = obj.val;
return *this;
}
int main()
{
int ival = 10;
HasPtr A(&ival, 5);
HasPtr B(A);
cout << HasPtr::get_use() << endl;
return 0;
}
这样使用静态数据成员可以代替使用计数吗?
[解决办法]
你的明白静态的意义,我建议你好好再去理解下
你用静态替代的话就不能称为只能指针。
[解决办法]
用全局变量也行。只是这样做会破坏类的封装。逻辑不合理。