#ifndef _COWPTR_IMPL_H_ #define _COWPTR_IMPL_H_ namespace TinySTL{ template cow_ptr::cow_ptr(T *p = nullptr) :ptr_(p){} template template cow_ptr::cow_ptr(T *p, D d) : ptr_(p, d){} template cow_ptr::cow_ptr(const cow_ptr& cp){ ptr_ = cp.ptr_; } template cow_ptr& cow_ptr::operator = (const cow_ptr& cp){ if (this != &cp){ ptr_.decrease_ref(); ptr_ = cp.ptr_; } return *this; } template typename cow_ptr::element_type cow_ptr::operator *()const{ return *ptr_; } template typename cow_ptr::element_type *cow_ptr::operator ->()const{ return ptr_.operator->(); } } #endif