不是new出来的内存也可以用delete释放吗?帮忙看下C++primer中的这段代码?
template <class T> class Handle {
public:
// unbound handle
Handle(T *p = 0): ptr(p), use(new size_t(1)) { } //构造函数,如果传递过来的实参是个数组名的话,
// overloaded operators to support pointer behavior ptr的值就不是new出来的指针,但是请看下面
T& operator*(); 析构函数还是有可能用delete释放内存。
T* operator->();
const T& operator*() const;
const T* operator->() const;
// copy control: normal pointer behavior, but last Handle deletes the object
Handle(const Handle& h): ptr(h.ptr), use(h.use)
{ ++*use; }
Handle& operator=(const Handle&);
~Handle() { rem_ref(); }
private:
T* ptr; // shared object
size_t *use; // count of how many Handle spointto *ptr
void rem_ref()
{ if (--*use == 0) { delete ptr; delete use; } }
};