释放对象的内存 VS 终止管家?
release object's memory VS termination housekeeping?
我正在研究 Paul Deitel 的一本名为 "C++ How to Program" 的书,第 9 章正在谈论 类,我引用:
The destructor itself does not actually release the object's memory--it performs termination housekeeping before the object's
memory is reclaimed, so the memory may be reused to hold new objects.
所以我的问题是,作者所说的终止管理和释放内存是什么意思?他们彼此之间有何不同?如果它们有任何不同。
意思是析构函数不释放内存,但它是一个可以声明需要做哪些管家函数的地方。例如,如果您的对象拥有指向它应该释放的其他数据的指针,那么是时候删除它们了。例如,如果您有一个名为 owned
的指针,它被赋予了要保留的内容:
MyThing::~MyThing() {
delete owned;
}
这个 delete
调用将触发那个 owned
对象的析构函数(如果它有一个),它以递归的方式重新启动这个过程。
您还可以关闭文件句柄,删除临时文件,无论您的对象在整理时应该做什么。这可能还包括删除操作系统 GUI 元素,这实际上取决于此代码所在的位置。
析构函数在释放内存的过程中被调用,但它本身并没有释放自己的任何内存。该操作在析构函数完成后执行。
除了释放内存之外,还有其他形式的清理。有时您可能需要在 class 的终止符期间关闭通信通道。或者您可以在 class 关闭时释放用于线程的资源。或者,也许您只是修改一个指向的对象。
析构函数是当对象超出范围时运行的代码。没有别的了。
我正在研究 Paul Deitel 的一本名为 "C++ How to Program" 的书,第 9 章正在谈论 类,我引用:
The destructor itself does not actually release the object's memory--it performs termination housekeeping before the object's memory is reclaimed, so the memory may be reused to hold new objects.
所以我的问题是,作者所说的终止管理和释放内存是什么意思?他们彼此之间有何不同?如果它们有任何不同。
意思是析构函数不释放内存,但它是一个可以声明需要做哪些管家函数的地方。例如,如果您的对象拥有指向它应该释放的其他数据的指针,那么是时候删除它们了。例如,如果您有一个名为 owned
的指针,它被赋予了要保留的内容:
MyThing::~MyThing() {
delete owned;
}
这个 delete
调用将触发那个 owned
对象的析构函数(如果它有一个),它以递归的方式重新启动这个过程。
您还可以关闭文件句柄,删除临时文件,无论您的对象在整理时应该做什么。这可能还包括删除操作系统 GUI 元素,这实际上取决于此代码所在的位置。
析构函数在释放内存的过程中被调用,但它本身并没有释放自己的任何内存。该操作在析构函数完成后执行。
除了释放内存之外,还有其他形式的清理。有时您可能需要在 class 的终止符期间关闭通信通道。或者您可以在 class 关闭时释放用于线程的资源。或者,也许您只是修改一个指向的对象。
析构函数是当对象超出范围时运行的代码。没有别的了。