假设我在堆上有两个项目:
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是否分配有newor new[],所以该函数如何正确地deleteor delete[]?