motivation
后天有个C++实习面试, 智能指针感觉挺爱问的, 刚好实现了一下, 做此纪录, 以备日后查看.
shared_ptr
shared_ptr
会维护一个count, 每次新增加一个指向对象的指针, count + 1, 每次析构掉一个指针, count - 1; 当count == 0
的时候真正释放对象. 这一切都由shared_ptr
帮你完成, 而不再需要手动delete
;
构思
- 所有指向同一个对象的指针应该共享一个count, 因此count可以设计为一个new int, 而在
shared_ptr
中有一个int *
的指针, 指向这个int; - 同理对象也是共享的, 因此
shared_ptr
类中应该有一个T *
的指针指向实际的data
;
实现
- 需要支持以下操作:
SharedPointer ptr(new T())
, 即直接用一个data *
指针初始化SharedPointer ptr
, 初始化一个未指向任何对象的指针;SharedPointer ptr1(ptr)
, 用另外一个sharedptr构造;SharedPointer ptr2; ptr2 = ptr
, 即拷贝赋值;int useCount()
, 该对象引用计数;addReference()
, 新增计数;removeReference()
, 删除计数, 当计数为0的时候需要delete
计数 和 对象;T& operator *()
解引用;T* operator ->()
指针操作;
代码
1 | // |
感想
基本功还是重要啊, 感觉实现很简单, 主要还是侯捷的面向对象讲的那些注意点;
reference
主要参考知乎这篇文章: