-------------------------------------------------------分割线-------------------------------------------------------------
有参数构造、拷贝构造、等号重载 、*重载 、& 重载 、指针数量getCountPtr、析构函数。
class SmartPoint
{
public:
SmartPoint(T* Ptr ) :_mPtr(Ptr) {
if (this->_mPtr = nullptr) {
num = new size_t(0);
}
else {
num = new size_t(1);
}
cout << "有参构造" << endl;
}
SmartPoint(const SmartPoint& Ptr) {
if (this != &Ptr) {
this->num = Ptr.num;
this->_mPtr = Ptr._mPtr;
(*this->num)++;
}
cout << "拷贝构造" << endl;
}
~SmartPoint()
{
(*this->num)--;
if (*this->num == 0) {
delete this->_mPtr;
this->_mPtr = nullptr;
delete this->num;
}
}
SmartPoint& operator = (const SmartPoint& Ptr) {
if (this == &Ptr) {
return *this;
}
else {
if (this->_mPtr) {
*(this->num)--;
if (*this->num == 0) {
delete this->_mPtr;
this->_mPtr = nullptr;
delete this->num;
}
}
return *this;
}
}
T& operator*() {
return *(this->_mPtr);
}
T* operator->() {
return this->_mPtr;
}
size_t getCount() {
return *(this->num);
}
private:
T* _mPtr;
size_t* num;
};
调用函数:
int main()
{
SmartPoint<int> sp(new int(10));
SmartPoint<int> sp2(sp);
SmartPoint<int> sp3=sp2;
std::cout << sp.use_count() << std::endl;
std::cout << sp2.use_count() << std::endl;
std::cout << sp3.getCount() << std::endl;
}