如何释放动态分配的类? [重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

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

#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;

如果不是这样,我怎么能删除对象?

c++ memory-management dynamic-memory-allocation
2个回答
0
投票

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

如果不是这样,我怎么能删除对象?

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

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

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


0
投票

1-调用删除将内存区域标记为空闲。它不需要重置其旧值。

2 - 访问释放的内存肯定会导致你一个未定义的行为,所以这是非常不可取的尝试

© www.soinside.com 2019 - 2024. All rights reserved.