我一直在研究 C++ 如何处理作为参数传递的指针,但到目前为止我的问题还没有找到可靠的“是/否”答案。
我是否需要对它们调用 delete/free,或者 C++ 是否足够智能以自行清除它们?
我从未见过有人对传递的指针调用 delete,所以我假设您不需要,但我想知道是否有人知道实际需要这样做的情况。
谢谢!
最佳答案
用于作为参数传递的指针的存储将被清理。但是它们指向的内存不会被清理。
例如:
void foo(int *p) // p is a copy here
{
return;
// The memory used to hold p is cleared up,
// but not the memory used to hold *p
}
int main()
{
int *p = new int;
foo(p); // A copy of p is passed to the function (but not a copy of *p)
}
你会经常听到人们谈论“在堆上”和“在栈上”。* 局部变量(例如参数)存储在栈上,栈会自动清理。使用 new
(或 malloc
)分配的数据存储在堆上,不会自动清理。
* 但是,C++ 标准并未讨论“堆栈”和“堆”(这些实际上是特定于实现的细节)。它分别使用术语“自动存储”和“分配存储”。
关于c++ - C++ 如何处理作为参数传递的指针的清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636333/