C++智能指针的简单实现代码
2015-04-11 22:46
656 查看
其中附带部分测试代码
#include <stdio.h> #include <assert.h> #include <string> template <typename T> class SmartPointer { public: SmartPointer(T *p); SmartPointer(const SmartPointer &pointer); ~SmartPointer(); SmartPointer<T>& operator=(SmartPointer<T> &pointer); SmartPointer<T>& operator=(T *p); T* operator->(); operator T*(); public: size_t GetRefCounts() { return *ref_count_; } // used for test private: void JustCopyData(const SmartPointer<T> &pointer); private: size_t *ref_count_; T *p_; }; template <typename T> SmartPointer<T>::SmartPointer(T *p) : ref_count_(new size_t(1)), p_(p) { } template <typename T> SmartPointer<T>::SmartPointer(const SmartPointer<T> &pointer) { JustCopyData(pointer); ++*ref_count_; } template <typename T> SmartPointer<T>::~SmartPointer() { if (*ref_count_ == 1) { delete ref_count_; delete p_; } else { --*ref_count_; } } template <typename T> SmartPointer<T>& SmartPointer<T>::operator=(SmartPointer<T> &pointer) { ++*pointer.ref_count_; this->~SmartPointer(); JustCopyData(pointer); return *this; } template <typename T> SmartPointer<T>& SmartPointer<T>::operator=(T *p) { this->~SmartPointer(); new (this) SmartPointer<T>(p); return *this; } template <typename T> SmartPointer<T>::operator T*() { return p_; } template <typename T> T* SmartPointer<T>::operator->() { return p_; } template <typename T> void SmartPointer<T>::JustCopyData(const SmartPointer<T> &pointer) { ref_count_ = pointer.ref_count_; p_ = pointer.p_; } void TestSmartPointer() { typedef std::string TestType; TestType *p = new TestType("abc"); SmartPointer<TestType> pointer(p); assert(pointer.GetRefCounts() == 1); { SmartPointer<TestType> local_pointer = pointer; assert(p == local_pointer); assert(local_pointer.GetRefCounts() == 2); assert(local_pointer->size() == p->size()); pointer = new TestType(); assert(local_pointer.GetRefCounts() == 1); SmartPointer<TestType> local_pointer2(pointer); local_pointer2 = local_pointer; assert(local_pointer.GetRefCounts() == 2); assert(p == local_pointer2); } assert(p != pointer); assert(pointer.GetRefCounts() == 1); } int main() { TestSmartPointer(); return 0; }
相关文章推荐
- C++中智能指针的工作原理和简单实现
- C++ 最简单的 '智能指针' 的实现
- 用c++简单实现智能指针
- C++中智能指针的工作原理和简单实现
- 用c++简单实现智能指针(转)
- C++中智能指针的工作原理和简单实现
- 简单模拟实现c++智能指针-指针移交控制权
- c++ 智能指针的简单实现
- C++中智能指针的工作原理和简单实现
- 用c++简单实现智能指针(转)
- 一个简单的C++智能指针的实现
- C++中智能指针的工作原理和简单实现
- [8]C++智能指针的简单实现
- C++中智能指针的工作原理和简单实现
- C++智能指针的简单实现
- C++中智能指针的工作原理和简单实现
- 【C++】智能指针auto_ptr的简单实现
- C++智能指针及其简单实现
- C++ 智能指针的简单实现
- C++中智能指针的工作原理和简单实现