为什么将对象指针传递给方法并在方法中删除它与直接删除对象不同

Why passing an object pointer to a method, where it is deleted, is different from deleting the object directly?

本文关键字:方法 对象 删除 指针 为什么      更新时间:2023-10-16

导致一个块泄漏的代码如下:

<>之前in = new RandomAccessFile(fileName, "r");在- - - - - -> close ();Mem: delObject(的);之前

其中RandomAccessFile为具有string字段的类,delObject()为静态方法,如下所示:

<>之前无效Mem::delObject(对象*对象){删除对象;}之前

泄漏块为string

如果我用直接的delete替换delObject方法:

<>之前in = new RandomAccessFile(fileName, "r");在- - - - - -> close ();删除();之前

泄漏消失了。如果方法没有被替换,而是被移除:

<>之前in = new RandomAccessFile(fileName, "r");在- - - - - -> close ();//Mem: delObject(的);//删除(在);之前

有两个泄漏块。我猜是字段和包含它的对象。

那么:为什么这两种删除对象的方式行为不同?

我只能猜测,但似乎你忘记了对象类中的虚拟析构函数。因此,调用RandomAccessFile析构函数不会导致其属性泄漏。