2017-04-08 38 views
0

我有以下简单的类Foo了解析构函数

class Foo { 

}; 

我尝试运行下面的单元测试代码:

Foo* foo = new Foo; 

Assert::IsNotNull(foo); 

delete foo; 

Assert::IsNull(foo); //why is it not null?? I deleted it. 

当我删除foo此对象的内存被释放,因此foo应该指向nullptr

为什么foo在删除后不为空?

+0

使用*智能指针*来避免无意的内存泄漏。 –

回答

4

删除不会改变指针的值,但只释放它指向的内存。删除后,相应的指针无效。 (删除也会调用析构函数)。

删除一个有效的指针必须总是成功,否则它是未定义的行为。

+0

如果我删除了'Foo'析构函数中的其他对象,我怎么能单元测试它们确实被删除了而没有任何内存泄漏? – Humberd

+3

'delete'不仅仅**释放内存;它也运行对象的析构函数(尽管在这种情况下没有析构函数可以运行)。 –

+0

如何判断'foo'的内存是否被释放? – Humberd