c++如何处理作为参数传递的指针的清理?
How does C++ handle cleanup of pointers passed as arguments?
我一直在做一些关于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)
}
你会经常听到人们谈论"on the heap"answers"on the stack"。*局部变量(例如参数)存储在堆栈中,并自动清除。数据分配使用new
(或malloc
)存储在堆上,这不是自动清理。
*然而,c++标准没有讨论"堆栈"answers"堆"(这些实际上是特定于实现的细节)。它分别使用术语"自动存储"answers"分配存储"。
传递给方法的参数存储在堆栈中,因此在函数返回时自动销毁——就像局部变量一样。它们所指向的内存不会自动释放。
如果你从调用者那里收到一个指针,除非另有说明,否则调用者有责任释放该指针。
指针将被"按值"复制。当函数存在时,它们将被销毁,但由于它们的析构函数很简单,因此不会对它们指向的内存做任何操作。
对于指针本身,没有。当参数堆栈帧在函数返回时被消除时,它们就消失了,就像int或char形参一样。你是否必须对指向的数据做任何事情是你和你的代码之间的…
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 使用 C++11 将指向成员函数的指针作为参数传递
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 在一行中将默认类型值上的指针作为参数传递
- 将双指针作为参数传递给需要引用 std::vector <double>的函数