初始化新对象时如何释放内存

时间:2017-12-12 11:07:22

标签: c++ memory memory-management stack heap

我对堆和堆栈内存有一些疑问。查看后续代码

//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

0 个答案:

没有答案