c++ 析构函数 delete

#include
usingnamespacestd;
classBASE
{
public:
virtual~BASE()
{
cout<<"Basedeconstruction"<}
};
classCCHILD:publicBASE
{
public:
~CCHILD()
{
cout<<"CCHILDdeconstruction"<}
};
intmain(intargc,charconst*argv[])
{
BASE*Pbase;
BASEb;
Pbase=&b;
deletePbase;
cout<<"-----"<CCHILDc;
Pbase=&c;
deletePbase;
return0;
}
请大神解释,delete为什么提示无效的指针啊
芜湖不芜
浏览 417回答 2
2回答

繁华开满天机

可以简单地认为C++的变量有两类,一类是在程序初始化时已经分配了固定空间的,另一类是由malloc动态申请的位于堆空间中的;比如BASEb,那么变量b所在位置、所占空间等都是可以确定下来的,属于已经静态分配完成的变量,由编译器安排了其内存地址,是被写死在可执行文件中的;而由malloc()/new申请的变量则是动态的,其地址在运行时才被告知,也只有这样的动态分配空间的变量才能被free()/delete释放空间你的代码想要删除一个被写死在程序中的变量,怎么可能运行成功
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript