我的问题主要是理论上的。假设我们有一堂课
class A{
private:
int * a;
int b;
private:
A(){
a = new int[100];
b = 100;
}
~A(){
delete [] a;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,如果我们动态创建类型A的对象(A * a = new A()),该对象的内存将在堆中分配,如果我使用(A a),它将在堆栈中创建(A a)。如果在堆栈上为变量创建对象,则在堆上a分配变量;如果在堆栈上为对象分配对象,则在堆栈上分配对象b。我要确定的第一个问题是:我正确吗?
第二个问题是,将类的所有成员存储在堆内存或堆栈内存中会更有效吗?
class A{
private:
int * a;
int * b;
private:
A(){
a = new int[100];
b = new int(100);
}
~A(){
delete [] a;
delete b;
}
}
Run Code Online (Sandbox Code Playgroud)
当我说有效时,我的意思是所有关于类成员的数据都将彼此靠近地存储在堆或堆栈的内存中(实际上,我不确定它们将彼此靠近存储是正确的)。