在我用C和C++编写的程序中,我将新建一个对象来完成任务,然后删除该对象.
在新对象之后但在删除对象之前的那一刻,如果用户按下ctrl+ c以中断进程,则将导致不调用delete并发生内存泄漏.
我该怎么做才能避免这种情况?
此外,如果操作系统回收了内存,那么打开的文件呢?它们是由操作系统关闭还是我应该手动关闭它们?
在基于虚拟内存的系统中,无论是否在应用程序代码中明确释放进程,都会在进程终止时将所有内存返回给操作系统.但是,对于其他资源而言,情况可能并非如此,您可能希望干净利落.在这种情况下,您需要为信号提供自定义信号处理程序SIGINT(在Ctrl + C上接收),请参阅例如http://linux.die.net/man/2/sigaction.
按下CtrlC将向SIGINT进程发送一个进程,默认情况下,该进程主要是按顺序关闭,包括拆除内存管理器并释放所有已分配的堆和堆栈.如果您需要执行其他任务,则需要安装SIGINT处理程序并自行执行这些任务.