释放对象的内存VS终止内务管理?

时间:2017-07-27 17:31:25

标签: c++ constructor destructor

我正在读一本名为“#C ++如何编程"保罗·迪特尔(Paul Deitel),第9章讨论的是类,我引用:

  

析构函数本身实际上释放对象的内存 - 它在对象&之前执行终止内务管理 #39; S   内存被回收,因此可以重用内存来保存新对象。

所以我的问题是,作者通过终止家务和释放记忆意味着什么?他们彼此有多么不同?如果他们有任何不同。

2 个答案:

答案 0 :(得分:2)

这意味着析构函数不会释放内存,但是您可以在其中声明需要执行哪些内务处理功能。例如,如果您的对象拥有指向它应该释放的其他数据的指针,那么就该删除它们了。例如,如果您有一个名为owned的指针,则该指针需要保留:

MyThing::~MyThing() {
  delete owned;
}

delete调用将触发该owned对象的析构函数(如果有),它将以递归方式重新启动此过程。

您也可以关闭文件句柄,删除临时文件,无论您在整理时对象应该做什么。这可能包括删除操作系统GUI元素,它实际上取决于此代码所在的位置。

析构函数在释放内存的过程中被调用,但它本身不会释放任何自己的内存。该行为在析构函数完成后执行。

答案 1 :(得分:1)

除了释放记忆之外,还有其他形式的清理。有时您可能需要在类的终结符期间关闭通信通道。或者,您可以在类关闭时释放用于线程的资源。或者你可能只是修改指向对象。

析构函数是当对象超出范围时运行的代码。除此之外别无其他。