类内的成员变量在哪里分配
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
也会处理字符串。
strName
将被放置在放置Sample
对象的位置。但是,类string
可以在引擎盖下解决它喜欢的任何存储,是否使用普通变量(然后它们再次放置在放置string
的位置,指向某物的指针,内存映射,一直只是从地球的另一端查询XML接口。
但是,string
必须以某种方式存储地址,因此例如,它的指针或引用或URL或任何使用的寻址方案都放置在放置string
的位置。
相关经验法则:指针本身就是值(这就是为什么在对象复制情况下很难正确处理的原因)。
分配类,都将使用类创建结构、数组、指针和基本数字类型。
字符串更复杂。它们是一种容器。定义容器的字符串成员将作为示例类中的成员存储在类的内存块中。字符串的文本可能会被分配到堆上的其他地方(取决于字符串类实现)。
现在,如果您这样做Sample* blah = new Sample();
则运算符 new 将在堆中分配内存(指针将位于堆栈上,如果它最初是堆上类的成员,则指针位于堆上)。
如果您只是将其用作变量,它将存储在堆栈中:Sample blah;
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 当我们在C++中创建类的对象时,为成员函数分配的内存在哪里?
- 分配以下对象属性在哪里
- 静态对象的非静态成员分配在哪里
- 我在哪里定义代码来释放在C Python模块init函数中分配的资源
- 类内的成员变量在哪里分配
- ctime 在哪里以及如何分配内存
- 在堆栈上创建对象时分配的内存在哪里
- std::vector 在哪里分配其内存
- 分配后,我必须在哪里释放内存
- 这些参数分配在哪里
- boost::make_shared在哪里为底层对象和引用计数对象分配内存大小
- 模板化的方法代码在哪里分配?
- 这个内存分配在哪里分配
- 在哪里为已初始化的java中的数据成员分配的内存@声明点..