繁体   English   中英

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

[英]Where does the member variable inside a class allocated?

我有一堂课

class Sample
{
   string strName;
};

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

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

如果您的意思是Sample* obj = new Sample() ,则它位于动态存储(堆)中。

当您调用delete obj ,即使字符串在堆上,该字符串也会被自动删除。

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

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

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

现在,如果您执行Sample* blah = new Sample(); 然后new运算符将在堆中分配内存(指针将在堆栈上,或者,如果指针最初是堆中类的成员,则该指针将在堆上)。
如果仅将其用作变量,它将被存储在堆栈中Sample blah;

strName将放置在放置Sample对象的位置。 但是,类string可能位于其底层,无论它喜欢使用哪种存储,是否使用普通变量(然后再次将它们放置在放置string的位置,指向某物的指针,内存映射,这些时间始终只是从另一个查询XML接口地球的一面。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM