最近面试题有遇到这个题,让你手撸个shared_ptr
参考:
实现一个简单的shared_ptr
智能指针原理及实现(1)shared_ptr
写的很棒,学习一波。
一句话介绍shared_ptr智能指针:多个shared_ptr中的T *ptr
能指向同一个内存区域(同一个对象),并共同维护同一个引用计数器。
一般来说,智能指针的实现需要以下步骤:
1.一个模板指针T* ptr
,指向实际的对象。
2.一个引用次数(必须new出来的,不然会多个shared_ptr里面会有不同的引用次数而导致多次delete)。
3.重载operator*
和operator->
,使得能像指针一样使用shared_ptr。
4.重载copy constructor
,使其引用次数加一。
5.重载operator=
,如果原来的shared_ptr已经有对象,则让其引用次数减一并判断引用是否为零(是否调用delete)。
然后将新的对象引用次数加一。
6.重载析构函数,使引用次数减一并判断引用是否为零(是否调用delete)。
#include <string>
#include <iostream>
using namespace std;
template <typename T>
class Shared_ptr {
public:
// 空参构造 空指针
Shared_ptr():count(0), _ptr((T*)0) {
}
// 构造函数 count必须new出来
Shared_ptr(T* p) : count(new int(1)), _ptr(p) {
}