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)
会自动删除吗?如果没有,它会发生什么,我应该如何删除它?
指针变量是指向其他内存的变量。
当您将指针作为参数传递给函数时,会复制指针本身,但不会复制它指向的内存。因此没有什么可以“删除”的。
让我们以这个简单的示例程序为例:
#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"上面例子中的文字字符串永远不需要被删除或释放,它们由编译器管理并且存在于程序的整个运行时。