我下面有这个简单的程序:
#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;
如果不是这样,如何删除对象?
答案 0 :(得分:0)
1-调用delete将把存储区标记为空闲。无需重置其旧值。
2-访问已释放的内存肯定会导致您未定义的行为,因此尝试这样做是极不明智的选择
答案 1 :(得分:0)
始终删除使用new
关键字创建的内容。如果使用new
关键字创建指针数组,请使用delete[]
删除该数组的所有指针元素。
如果不是这样,如何删除对象?
这是删除使用new
关键字创建的对象的正确方法。
为什么我在使用命令后得到的值是28?
删除指针后,您不应引用该指针。它导致未定义的行为。您可能会获得旧值或令人讨厌的细分错误。