如何取消分配动态分配的类?

时间:2019-02-14 21:09:49

标签: c++ memory-management dynamic-memory-allocation

我下面有这个简单的程序:

#include <iostream>            
using namespace std;

class pithikos {

public:
    //constructor
    pithikos(int x, int y){
        xPosition = x;
        yPosition = y;
    }

    //multiplicator of x and y positions
    int xmuly(){
        return xPosition*yPosition;
    }   

private:
    int xPosition;
    int yPosition;
};

int main(void){


//alloccate memory for several number of pithikous
pithikos **pithik = new pithikos*[10];
for (int i = 0; i<10; i++){
     pithik[i] = new pithikos(i,7);
}

cout << pithik[3]->xmuly() << endl; /*simple print statement for one of the pithiks*/

//create pithikos1 
pithikos pithikos1(5,7);
cout << pithikos1.xmuly() << endl;

//delete alloccated memory
for (int i=0; i<10; i++) delete pithik[i];
delete [] pithik;
cout << pithik[4]->xmuly() << endl;
}

该类仅取两个数字并将它们相乘并返回值。 但是我希望这些军人能够出生并死去。

因此,在此示例中,我分配了10个对象(pithikos),然后我测试它是否有效。

当我运行程序时,我得到了:

  

21

     

35

     

28

我的问题是:为什么我在使用命令后会得到28的值?

delete [] pithik;

如果不是这样,如何删除对象?

2 个答案:

答案 0 :(得分:0)

1-调用delete将把存储区标记为空闲。无需重置其旧值。

2-访问已释放的内存肯定会导致您未定义的行为,因此尝试这样做是极不明智的选择

答案 1 :(得分:0)

始终删除使用new关键字创建的内容。如果使用new关键字创建指针数组,请使用delete[]删除该数组的所有指针元素。

  

如果不是这样,如何删除对象?

这是删除使用new关键字创建的对象的正确方法。

  

为什么我在使用命令后得到的值是28?

删除指针后,您不应引用该指针。它导致未定义的行为。您可能会获得旧值或令人讨厌的细分错误。