假设我在堆上有两个项目:
Foo *f = new Foo;
Foo *g = new Foo[42];
假设我有一个接收Foo
指针的函数,并且在函数中它需要执行一个delete
:
void bar(Foo *p) {
// some stuff
delete p;
}
这个函数可能会这样调用:
bar(f); // passing a pointer to a Foo object on the heap
bar(g); // passing a pointer to an array on the heap
我认识到delete[]
并delete
应该分别用于释放和分配的new[]
内存new
;但是,由于该函数不知道其参数p
是否分配有new
or new[]
,所以该函数如何正确地delete
or delete[]
?