class Parent{public:Parent();~Parent();void setX(int x);int getX();private:int x;};void Parent::setX(int x){this->x=x;}int Parent::getX(){return this->x;}一個很普通的類 然后mian函數我調用的時候結果很讓我費解Parent *p=new Parent();p->setX(5);cout<<p->getX();delete(p);cout<<p->getX();結果輸出了 2個5 我以為會報錯的 . delete沒有把 x 的內存釋放掉為什么?為什么 x還存在內存中 該如何釋放
4 回答

慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
delete(p);
只表示p所指向的內存塊的所有權,不歸p所管了,但是內存里的值還在,
所以你delete完之后,取內存里的值,當然還在。
所以為什么內存釋放之后一定要將指針置空,防止野指針出現
正確做法:
delete(p);
p = NULL;

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
如果類的對象里沒有用new創建的數據成員,那么你就不需要擔心類所占的空間 ,因為在這個對象的生命周期結束之后就會自己回收內存
如果是通過new那么 內存是在堆上分配 則使用delete刪除類中的用new開辟的數據成員,其他的不用管,自動釋放。
添加回答
舉報
0/150
提交
取消