初学者提问,怎么delete整个new对象?

zhou8210 2017-12-23 11:15:58
#include <iostream>
class Stringbad
{
private:
int na;
int nb;
public:
Stringbad(int a,int b);
void show();
};
//////////////////////////////////////
void Stringbad::show()
{
cout<<"na="<<na<<endl;
cout<<"nb="<<nb<<endl;
}
//////////////////////////////////////
Stringbad::Stringbad(int a,int b)
{
na=a;
nb=b;
}

/////////////////////////////////////
int main(int argc, char *argv[])
{
using namespace std;
Stringbad* p=new Stringbad(5,8); //请问怎样delete掉
p->show(); // 用new分配来的整个对象 p?
cout<<endl;
delete p; //这句只能delete 成员na,为什么?
cout<<"delete p"<<endl;
p->show();

cin.get();
cin.get();
return 0;
}

c-free的运行结果
na=5
nb=8

delete p
na=0
nb=8 //想当然地nb=0才对呀,为什么呢?
...全文
246 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
没味儿 2017-12-26
  • 打赏
  • 举报
回复
using namespace std; Stringbad* p=new Stringbad(5,8); //请问怎样delete掉 p->show(); // 用new分配的是Stringbad对象的内存,p是指向那块内存的指针 cout<<endl; delete p; //已经把内存释放. 但指针不会自动置空, 此时p是一个野指针(概念就不说了)下面应该要加上p = NULL; cout<<"delete p"<<endl; p->show(); cin.get(); cin.get(); return 0; } c-free的运行结果 na=5 nb=8 delete p na=0 nb=8 //无伦na nb的值是多少都是错误的, 野指针带来的错误不可预期...
l357630798 2017-12-26
  • 打赏
  • 举报
回复
引用 5 楼 qq_30350197 的回复:
delete之后,只是把地址释放了,短时间内没有其他程序使用该地址时候,这个指针指向的地址还是之前的位置, 一般使用delete之后都需要把指针指向空
预防野指针,好习惯。
dmfsmile 2017-12-25
  • 打赏
  • 举报
回复
delete之后,只是把地址释放了,短时间内没有其他程序使用该地址时候,这个指针指向的地址还是之前的位置, 一般使用delete之后都需要把指针指向空
sevancheng 2017-12-25
  • 打赏
  • 举报
回复
就是这么delete 不要过分相信编译器
worldy 2017-12-24
  • 打赏
  • 举报
回复
#include <iostream> class Stringbad { private: int na; int nb; public: Stringbad(int a,int b); void show(); }; ////////////////////////////////////// void Stringbad::show() { cout<<"na="<<na<<endl; cout<<"nb="<<nb<<endl; } ////////////////////////////////////// Stringbad::Stringbad(int a,int b) { na=a; nb=b; } ///////////////////////////////////// int main(int argc, char *argv[]) { using namespace std; Stringbad* p=new Stringbad(5,8); //请问怎样delete掉 p->show(); // 用new分配来的整个对象 p? cout<<endl; delete p; //这句只能delete 成员na,为什么? cout<<"delete p"<<endl; p->show(); //p已经删除,此处是非法调用 cin.get(); cin.get(); return 0; }
zhou8210 2017-12-24
  • 打赏
  • 举报
回复
已经找到原因了,是编译器问题。 VC6的运行结果是: na=5 nb=8 delete p na=-572662307 nb=-572662307 完全符合预期 不断地试错,是学C++一个好方法。
schlafenhamster 2017-12-24
  • 打赏
  • 举报
回复
"这句只能delete 成员na,为什么?" delete 不是 清除 na nb !

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧