堆栈内存使用C ++,用于动态创建的类

时间:2014-03-25 12:48:34

标签: c++ class pointers memory-management

如果使用非指针成员变量和非指针成员函数在C ++中创建一个类,但是你动态地(使用指针)初始化类的实例,那么内存使用是来自堆还是堆栈?

我正在尝试从堆栈中减少内存的项目的有用信息:)。

非常感谢任何回应。

非常感谢和愉快的编码。

3 个答案:

答案 0 :(得分:8)

如果使用运算符new来分配类,则将它放在堆上。无论成员变量是否被指针访问都无关紧要。

class A {
    int a;
    float* p;
};
A* pa = new A(); // required memory is put on the heap
A a; // required memory is put on the stack

但要小心,因为指针访问的每个实例都不会真正位于堆上。例如:

A a; // all members are on the stack
A* pa = &a; // accessed by pointer, but the contents are still not on the heap!

另一方面,位于堆栈上的类实例可能在堆上包含大部分数据:

class B {
public:
    std::vector<int> data; // vector uses heap storage!
    B() : data(100000) {}
};
B b; // b is on the stack, but most of the memory used by it is on the heap

答案 1 :(得分:1)

如果使用'new'创建对象,则在堆中创建对象。

答案 2 :(得分:0)

指针变量内存的

将在stack中分配,但当您使用newmalloc时,该内存段将在heap中分配