const char* 作为参数传递时会自动删除吗?

Sup*_*135 0 c++ pointers memory-management const-char string-literals

当我将 aconst char*作为函数参数传递时(像这样):

void print(const char* text)
{
     std::cout << text << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

会自动删除吗?如果没有,它会发生什么,我应该如何删除它?

Som*_*ude 5

指针变量是指向其他内存的变量。

当您将指针作为参数传递给函数时,会复制指针本身,但不会复制它指向的内存。因此没有什么可以“删除”的。


让我们以这个简单的示例程序为例:

#include <iostream>

void print(const char* text)
{
     std::cout << text << std::endl;
}

int main()
{
    const char* text = "foobar";

    print(text);
}
Run Code Online (Sandbox Code Playgroud)

main函数运行时,你有这样的东西:

+----------------------+ +--------------+
| 主函数中的文本 | --> | "foobar" |
+----------------------+ +--------------+

然后当print函数被调用并运行时,它有自己的指针副本:

+------------------------------+
| 主函数中的文本 | -\
+--------------+ \ +--------------+
                              >--> | "foobar" |
+------------------------+ / +----------+
| 打印功能中的文本| -/
+------------------------+

两个变量指向同一个内存。

此外,像"foobar"上面例子中的文字字符串永远不需要被删除或释放,它们由编译器管理并且存在于程序的整个运行时。

  • @SuperSim135 文字字符串*永远*不应该被释放。您应该“删除”您明确“新建”的内容,并“删除[]”您“新建[]”的内容。如果您的内存不是由“new”(或“new[]”)分配的,则永远不应该将其传递给“delete”(或“delete[]”)。 (2认同)