我正在实现一个智能指针类,并且有一些困惑。如果人们可以帮助我澄清,我将不胜感激。
1:我认为智能指针类在构造函数中应该有“new”,在析构函数中应该有“delete”。但是我似乎找不到放置“新”的地方......所以用户将负责创建新的,而智能指针类有助于清理它?
2:在设计复制赋值运算符时,一种流行的方法是复制-n-交换以保证线程安全。但是,copy-n-swap 要求对象按值(而不是按引用)传入。它仍然可以用于设计智能指针吗?我担心这是一个指针类,因此可能无法按值传递。但我对此不太确定。
3:如果我被要求在面试时编写智能指针,我是否必须提供某种类型的引用计数?认为引用计数特定于 shared_ptr ...
4:这一定是个愚蠢的问题,但最好问而不是在心里怀疑。为了SmartPointer<T>& sp
访问ptr,它应该使用sp->ptr
还是sp.ptr
??
感谢您的意见。
template <class T>
class SmartPointer{
T* ptr;
public:
SmartPointer():ptr(NULL){}
SmartPointer(const T& p):ptr(p){}
SmartPointer(const SmartPointer<T>& sp):ptr(sp->ptr){}
SmartPointer<T>& operator=(const SmartPointer<T>& sp);
~SmartPointer(){delete ptr;}
T& operator*(){return *ptr;}
T* operator->(){return ptr;}
};
SmartPointer& operator=(const SmartPointer& sp){
T* pOrig = ptr;
ptr = new T(sp.ptr);
delete pOrig;
return *this;
}