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

Is const char* automatically deleted when it is passed as an argument?

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

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

是否自动删除?如果不是,怎么办,我该如何删除?

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

当您将指针作为参数传递给函数时,会复制指针本身,但不会复制它指向的内存。因此 "delete".

没什么

让我们来看这个简单的示例程序:

#include <iostream>

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

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

    print(text);
}

main 函数为 运行ning 时,您会遇到类似这样的情况:

+-----------------------+     +----------+
| text in main function | --> | "foobar" |
+-----------------------+     +----------+

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

+-----------------------+
| text in main function | -\
+-----------------------+   \      +----------+
                              >--> | "foobar" |
+------------------------+   /     +----------+
| text in print function | -/
+------------------------+

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

此外,像上面示例中的 "foobar" 这样的文字字符串将 永远不会 需要被删除或释放,它们由编译器管理并存在于整个节目的整个 运行 时间。

在 C++ 中没有什么是自动完成的,因为就像 C 一样,哲学是 "you don’t pay for what you don’t use"。一切都必须手动完成。即使您看到内存被自动释放,那也是因为它是在析构函数中完成的(您或库编写者需要手动编写)。对于堆栈上的自动变量,您只需声明它们而不是手动分配它们,因此您也不要手动删除它们的内存区域,编译器将处理分配和释放

但是当您调用 print("Hello World!") 时,不需要重新分配任何东西,因为 没有任何东西被动态分配 。 A string literal like "Hello World!" is of type const char[N] (and decays to const char* when passing as parameters) and has static storage duration,这意味着它们在程序的整个生命周期内都存在于内存中!

只有动态分配的内存需要释放