类的字段的记忆

时间:2016-10-06 15:05:26

标签: c++

我有这样的课程:

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 namedouble age的内存将在何处分配?在堆栈或堆上?

3 个答案:

答案 0 :(得分:3)

  

新的Job(..)对象将存储在堆

这意味着类Job的所有成员都将存储在那里,以便在堆上回答您的问题。

请注意,标准不会谈论“堆”,适当的术语是“免费商店”。

答案 1 :(得分:3)

严格来说,C ++语言标准并未规定任何此类标准。

事实上,它甚至没有定义这些术语中的任何一个(堆栈)。

分配对象的内存部分完全依赖于编译器实现。

那就是说,在实践中,任何"体面的"编译器将创建一个目标代码,使两个字段都位于与包含对象的基地址相对的偏移处(因此在您的示例中,它们将被放置在堆中)。

答案 2 :(得分:2)

Job对象本身将在堆上。字符串的位置(表示存储字符的位置)取决于字符串类的实现者。它几乎可以肯定在某种堆上,但可能与Job对象不同。

如果在堆栈上创建了Job对象,则字符串仍将放置在字符串实现者指定的位置。