下面是对shared_ptr 和 unique_ptr这两种类的简单实现。
shared_ptr
template<typename T>
struct DefaultDeleter {
void operator()(T *ptr) {
if (nullptr != ptr) {
delete ptr;
ptr = nullptr;
}
}
};
template <typename T>
class SharedPtr {
public:
SharedPtr() : pointer_{
nullptr}, reference_count_{
nullptr} {
}
SharedPtr(T* pointer, std::function<void(T*)> deleter=DefaultDeleter<T>())
: pointer_{
pointer}, reference_count_{
nullptr} {
add_reference_count();
deleter_ = deleter;
}
SharedPtr(const SharedPtr<T>& copy) {
if (this != ©) {
this->pointer_ = copy.pointer_