不是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; } }
};
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; } }
};
...全文
相关推荐
深入理解C++中的new/delete和malloc/free动态内存管理及区别介绍
本篇文章将深入探讨C++中的`new`/`delete`与C语言中的`malloc`/`free`在动态内存管理上的差异,并分析它们的底层实现与执行流程。
New Delete
在C++ Primer中,“New Delete”章节详细讲解了如何使用new和delete操作符来分配和释放动态内存,以及在此过程中可能遇到的问题和最佳实践。
cpp-primer-learning
包括了解堆(heap)和栈(stack)的区别,以及如何使用new和delete操作符动态分配和释放内存。
cPP.cpp.tar.gz_6 Plus_?CPP Primer Plus 6
压缩包文件"cpp.cpp.tar.gz_6 Plus_?CPP Primer Plus 6"包含了多个与书中的程序清单相关的源代码文件,这些都是书中实例的实现。
c++ primer附录文件和源代码.zip
理解指针的概念,以及何时使用new和delete操作符,对于防止内存泄漏至关重要。8.


