首页 > 代码库 > careercup-C和C++ 13.8
careercup-C和C++ 13.8
13.8 编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer<T*>对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。
解法:
智能指针跟普通指针一样,但他借助自动化内存管理保证了安全性,避免了诸如悬挂指针、内存泄漏和分配失败等问题。
智能指针必须为给定对象的所有引用维护单一引用计数。主要实现构造函数、复制构造函数和赋值运算符,析构函数。
C++实现代码:
#include<iostream>#include<cstdlib>#include<new>using namespace std;template <typename T>class SmartPointer{public: SmartPointer(T* ptr) { ref=ptr; ref_count=(unsigned*)malloc(sizeof(unsigned)); *ref=1; } SmartPointer(SmartPointer<T> &sptr) { ref=sptr.ref; ref_count=sptr.ref_count; ++(*ref_count); } SmartPointer<T> &operator=(SmartPointer<T> &sptr) { if(this==&sptr) return *this; if(*ref_count>0) { remove(); } ref=sptr.ref; ref_count=sptr.ref_count; ++(*ref_count); return *this; } ~SmartPointer() { remove(); } T getValue() { return *ref; }protected: void remove() { --(*ref_count); if(*ref_count==0) { delete ref; free(ref_count); ref=NULL; ref_count=NULL; } }private: T* ref; unsigned *ref_count;};int main(){ int *p1=new int(); *p1=1111; int *p2=new int(); *p2=22222; SmartPointer<int> sp1(p1),sp2(p2); SmartPointer<int> spa=sp1; sp2=spa;}
careercup-C和C++ 13.8
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。