[英]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.