类中的成员变量在哪里分配?

时间:2012-07-05 11:03:59

标签: c++

我有一个班级

class Sample
{
   string strName;
};

如果我使用Sample *obj = new Sample()为Sample创建一个对象,那么字符串strName在哪里创建?它是堆栈还是堆中?

4 个答案:

答案 0 :(得分:4)

无处,因为Sample obj = new Sample()无法编译。

如果您的意思是Sample* obj = new Sample(),那么它就在动态存储(堆)中。

当你致电delete obj时,字符串将被自动删除,即使它在堆上。

答案 1 :(得分:2)

整个og obj位于“堆”上,其数据成员也是如此。但是,您不必担心管理分配给数据成员的内存。删除obj也会处理字符串。

答案 2 :(得分:1)

无论在何处分配类,都将使用类创建结构,数组,指针和基本数字类型。

字符串更复杂。它们是一种容器。定义容器的字符串成员将作为样本类中的成员存储在类的内存块中。 String的文本可能会被分配到堆上的其他位置(取决于字符串类实现)。

现在,如果你执行Sample* blah = new Sample();,那么operator new将在堆中分配内存(指针将在堆栈上,或者如果它最初是堆上类的成员则在堆上)。 /> 如果您只是将其用作变量,它将存储在堆栈中:Sample blah;

答案 3 :(得分:1)

strName将放置在Sample对象的放置位置。但是,类string可以根据需要设置任何存储,无论是否使用正常变量(然后它们被放置在放置string的地方,指向某些内容,内存映射,始终是只是从地球的另一端查询XML接口。

但是,string必须以某种方式存储地址,例如它的指针或引用或URL或使用的任何寻址方案都放在string所在的位置。


相关经验法则:指针本身就是值(这就是在对象复制情况下难以正确处理的原因)。