在使用 Java 一段时间后,我决定回到 C++,现在我对字符串在 C++ 中的工作方式感到非常困惑。
首先,假设我们有一个函数:
void fun() {
int a = 1;
Point b(1,2);
char c[] = "c-string";
}
据我了解,a
并b
分配在堆栈上。c
(指针)也在堆栈上分配,但内容(“c-string”)在堆上愉快地生活。
Q1:函数结束c
时会自动释放内容吗?fun
其次,假设我们有一个 c++ string
:
void fun2() {
(1) string s = "c++ string";
(2) s += "append";
(3) s = "new contents";
(4) s = "a" + s + "c";
}
字符串文档对字符串的工作方式并不太具体,所以这里有一些问题:
Q2:结束后的内容会s
自动释放fun2
吗?
Q3:当我们连接两个字符串时会发生什么?我应该关心内存使用情况吗?(第 2 行)
Q4:当我们覆盖字符串的内容(第 3 行)时会发生什么 - 内存呢,我应该担心吗?最初分配的空间是否被重复使用?
Q5:如果我构造一个这样的字符串会怎样(第 4 行)。这个很贵吗?字符串文字 ( "a"
, "c"
) 是池化的(就像在 Java 中一样)还是在整个最终可执行文件中重复?
我最终要学习的是如何在 C++ 中正确使用字符串。
感谢您阅读本文,
魁魁格