所以,我想更好地了解C++中字符串字面值的工作原理。我主要关心的是当您将字符串字面值的地址分配给指针并传递它时的情况。例如:
char* advice = "Don't stick your hands in the toaster.";
现在假设我只是通过复制指针来传递这个字符串,整个程序的时间。当然,这可能不是一个好主意,但我很好奇背后实际发生了什么。
另一个例子,假设我们创建一个返回字符串文字的函数:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
现在假设这个函数被频繁调用,而字符串字面量只有一半的时间被使用:
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
在第一种情况下,实际上发生了什么?字符串只是被创建但没有使用,并且从未被释放吗?
在第二种情况下,字符串会在用户需要它的时候维护多长时间?当它不再需要时会发生什么...假设没有任何指向该空间的东西,那么内存是否会被释放?
别误会,我不打算像这样使用字符串字面量。我计划使用容器来控制我的字符串(可能是std::string)。我主要想知道这些情况是否会对内存管理或损坏数据造成问题。