c++ - C++ 如何处理作为参数传递的指针的清理?

标签 c++ pointers memory-management 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)
}

你会经常听到人们谈论“在堆上”和“在栈上”。* 局部变量(例如参数)存储在栈上,栈会自动清理。使用 new(或 malloc)分配的数据存储在堆上,不会自动清理。


* 但是,C++ 标准并未讨论“堆栈”和“堆”(这些实际上是特定于实现的细节)。它分别使用术语“自动存储”和“分配存储”。

关于c++ - C++ 如何处理作为参数传递的指针的清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636333/

相关文章:

c++ - 如何在 clang(或 gcc)中删除 C++ 名称?

c - 自指结构

C语言: Newb translating code from javascript to C,代码包含malloc、strncpy、指针

java - 如果我对对象的引用超过 32 位所能解释的,会发生什么情况?

iphone - CGImage 创建大量脏内存导致应用程序崩溃

ios - 圆点表示法、释放和解除分配

c++ - remove_if 字符串匹配集合中的给定字符串

c++ - malloc 多个小时间或几个大时间更快?

c++ - 转换 - 错误 E2015,AnsiString(char) 和 AnsiString(short) 之间存在歧义

c++ - 将动态创建的对象分配给作为类的私有(private)成员的指针有什么问题吗?