我对堆和堆栈内存有一些疑问。查看后续代码
//This code is written in C++
class Box {
public:
double l, w, h v;
Box(double ll, double ww, double hh, double vv) {
l=ll;
w=ww;
h=hh;
v=vv;
}
virtual double containedValue() {
return v;
}
}
class Cube: public Box {
public:
Cube(double s, double v): Box(s, s, s, v);
virtual double containedValue() {
return v*v*v;
}
virtual void cloneCube() {
Cube* clone = new Cube(l, v);
}
}
void doSomething() {
Box* boxPtr1;
Box* boxPtr2;
Box box1(1.0, 2.0, 3.0, 4.0);
}
如上面的this链接代码,它表示该对象总是在堆内存上分配。所以我推断对象的参数也存储在堆内存空间中。但我还发现了另一个引用here,它表明对象创建的参数存储在堆栈中。那么存储参数究竟在哪里?
-----------
| l = 1.0 |
-----------
| w = 2.0 |
-----------
| h = 3.0 | Heap
-----------
| v = 4.0 | |---> -----------
----------- | | Box | —-> V-table somewhere
| box1 | ----| -----------
----------- | l = 1.0 |
| boxPtr2 | -----------
----------- | w = 2.0 |
| boxPtr1 | -----------
----------- | h = 3.0 |
Stack -----------
| v = 4.0 |
___________
Or
|---> -----------
----------- | | Box | —-> V-table somewhere
| box1 | ----| -----------
----------- | l = 1.0 |
| boxPtr2 | -----------
----------- | w = 2.0 |
| boxPtr1 | -----------
----------- | h = 3.0 |
Stack -----------
| v = 4.0 |
___________
Heap