编程语言中实现自动垃圾回收机制方式有好几种,常见的有标记清除,引用计数,分代回收等。
C++需要手动管理垃圾,可以自己实现一个智能指针。最简单的是引用计数的思路
template <class T>
class SmartPointer {
T* obj;
unsigned int* count;
SmartPointer(T* ptr) {
obj = ptr;
count = new int;
*count = 1;
}
SmartPointer(SmartPointer &p) {
obj = p.obj;
count = p.count;
++(*count);
}
SmartPointer &operator=(SmartPointer &p) {
if (*this != p) {
if(*count >0){
remove();
}
obj = p.obj;
count = p.count;
++(*count);
return *this;
}
}
virtual ~SmartPointer() {
remove();
}
private:
void remove() {
--(*count);
if(*count == 0){
delete obj;
delete count;
obj == nullptr;
count == nullptr;
}
}
};