这个问题在这里已有答案:
我有这个简单的程序如下:
#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;
如果不是这样,我怎么能删除对象?
始终使用new
关键字删除您创建的内容。如果使用new
关键字创建指针数组,请使用delete[]
删除数组的所有指针元素。
如果不是这样,我怎么能删除对象?
这是删除使用new
关键字创建的对象的正确方法。
我使用命令后为什么得到值28?
删除指针后,不应该使用指针。它会导致未定义的行为。您可能会得到旧的值或令人讨厌的分段错误。
1-调用删除将内存区域标记为空闲。它不需要重置其旧值。
2 - 访问释放的内存肯定会导致你一个未定义的行为,所以这是非常不可取的尝试