我有这样的课程:
class Job{
public:
string name;
double age;
Job(string name, double age){
this->age = age;
this->name = name;
}
};
如果我通过这种方式创建此类的对象:
Job* job = new Job("worker", 45.36);
new Job(..)
对象将存储在堆中,但是
string name
和double age
的内存将在何处分配?在堆栈或堆上?
答案 0 :(得分:3)
新的Job(..)对象将存储在堆
中
这意味着类Job
的所有成员都将存储在那里,以便在堆上回答您的问题。
请注意,标准不会谈论“堆”,适当的术语是“免费商店”。
答案 1 :(得分:3)
严格来说,C ++语言标准并未规定任何此类标准。
事实上,它甚至没有定义这些术语中的任何一个(堆或堆栈)。
分配对象的内存部分完全依赖于编译器实现。
那就是说,在实践中,任何"体面的"编译器将创建一个目标代码,使两个字段都位于与包含对象的基地址相对的偏移处(因此在您的示例中,它们将被放置在堆中)。
答案 2 :(得分:2)
Job对象本身将在堆上。字符串的位置(表示存储字符的位置)取决于字符串类的实现者。它几乎可以肯定在某种堆上,但可能与Job对象不同。
如果在堆栈上创建了Job对象,则字符串仍将放置在字符串实现者指定的位置。