#ifndef HASPTR_H
#define HASPTR_H
#include
class HasPtr
{
public:
HasPtr(const std::string &s =std::string()):
ps(new std::string(s)),i(0),use(new std::size_t(1)){};
HasPtr(const HasPtr& p):
ps(p.ps),i(p.i),use(p.use){++*use;}
HasPtr& operator=(const HasPtr&);
~HasPtr();
private:
std::string *ps;
int i ;
std::size_t *use;
};
#endif // HASPTR_H
#include “hasptr.h”
HasPtr::~HasPtr()
{
if(–*use==0)
{
delete ps;
delete use;
}
}
HasPtr& HasPtr::operator=(const HasPtr &s)
{
++*s.use;
/// if the left one of = is a new HasPtr object,
/// the 'use' of it is 1,so delete its own memory
/// and add the right items to it;
///
/// when it is resign itself again,the memory will
/// not be destoryed;
if(--*use ==0)
{
delete ps;
delete use;
}
ps = s.ps;
i = s.i;
use = s.use;
return *this;
}
本文详细介绍了C++中HasPtr类的实现,包括构造函数、拷贝构造函数、赋值运算符和析构函数。HasPtr类用于演示智能指针的概念,通过引用计数来管理动态分配的字符串资源。
1019

被折叠的 条评论
为什么被折叠?



