我正在进行一项关于事物在内存,静态,堆栈或堆中的位置的分配。我理解基础知识,但对以下问题感到困惑:
如果对象是类的公共成员函数的局部变量,则存储在C ++字符串对象中的字符。
我对如何确定存储这样一个字符的位置感到困惑。我希望将函数的激活记录推送到堆栈,然后该字符串是该激活记录的一部分,因此关联的字符也在堆栈上。它是否正确?
有没有一般方法来解决这个问题?我是否应该关注所有外层,或者是否有办法充分推断存储在存储器中的某些内容而不关心自己存储在代码中的所有细微差别?
答案 0 :(得分:3)
不一定。如果在堆栈上声明std::string
(例如,作为局部变量),则其所有成员变量都位于堆栈中。其成员变量可能包括长度字段和指向字符数组的指针。 (这取决于标准库的实现:标准没有准确定义std::string
必须具有的私有成员。)
但是字符本身并不在堆栈中。 std::string
使用new
动态分配内存,因此字符数据在堆上。