例子:
bool isHeapPtr(void* ptr)
{
//...
}
int iStack = 35;
int *ptrStack = &iStack;
bool isHeapPointer1 = isHeapPtr(ptrStack); // Should be false
bool isHeapPointer2 = isHeapPtr(new int(5)); // Should be true
/* I know... it is a memory leak */
为什么需要这样做:
如果我在一个类中有一个成员指针,而我不知道指向的对象是否是新分配的。那么我应该使用这样一个工具来确定是否需要delete
指针。
但是:
我的设计还没有完成。因此,我将编写代码以始终执行delete
操作。我将避免写垃圾代码。
static int iStatic = 42; int *ptrStatic = &iStatic;
- Mark Ransomnew
分配的内存并不意味着你应该调用delete
来释放它。这个对象可能被代码中的其他部分所拥有,这些部分可能会自行释放它,这是不好的。它也可能被其他东西使用,并且调用delete
将导致其他东西使用已删除的内存。它可能是指向已分配块的指针,而不是指向已分配块的指针,在这种情况下,delete
很可能会破坏你的堆栈,并在以后引起几乎不可能找到的问题。不要这样做。 - David Thornley