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,这意味着它们在程序的整个生命周期内都存在于内存中!
只有动态分配的内存需要释放
当我将 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,这意味着它们在程序的整个生命周期内都存在于内存中!
只有动态分配的内存需要释放