delete后仍然可以调用问题
来源:互联网 发布:商标域名注册管理局 编辑:程序博客网 时间:2024/04/30 11:48
#include <iostream.h>
class ClassOne
{
public:
int i;
void SetValue()
{
i = 1000;
}
void PrintValue()
{
cout<<"i = "<<i<<endl;
}
public:
ClassOne()
{
i = 100;
}
virtual ~ClassOne()
{
}
};
void main()
{
ClassOne* pBase;
pBase = new ClassOne;
pBase->PrintValue();
delete pBase;
pBase->SetValue();//已经用delete销毁pBase所指对象了,为什么还能
//调用SetValue函数并成功地将i置为1000???
pBase->PrintValue();
class ClassOne
{
public:
int i;
void SetValue()
{
i = 1000;
}
void PrintValue()
{
cout<<"i = "<<i<<endl;
}
public:
ClassOne()
{
i = 100;
}
virtual ~ClassOne()
{
}
};
void main()
{
ClassOne* pBase;
pBase = new ClassOne;
pBase->PrintValue();
delete pBase;
pBase->SetValue();//已经用delete销毁pBase所指对象了,为什么还能
//调用SetValue函数并成功地将i置为1000???
pBase->PrintValue();
}
我认为delete pBase只是通知系统,pBase所指的空间可以由系统自由分配了,相当于归还使用权。但pBase指针值没有变。由于你立刻调用pBase->SetValue,所以这块地址中的信息还没有被系统冲掉。因此你这样操作仍旧可以。为了彻底解决delete pBase后pBase可能还能使用的问题,一个好的编程风格是在delete pBase后,马上写上一句pBase = NULL;这样就永远不会有pBase->SetValue成立的可能性了。
0 0
- delete后仍然可以调用问题
- 鼠标关机后仍然发光问题
- Ecshop实现后台二次开发后功能模块仍然可以分配权限
- ecshop实现后台二次开发后功能模块仍然可以分配权限
- T1-单据生成凭证后仍然可以参照生成凭证
- tomcat设置环境变量后仍然闪退问题
- button 提交后验证不通过仍然提交问题
- 解决firefox设置不自动更新后仍然自动更新问题
- IOS 调用系统功能仍然显示英文问题
- 安装了MVC1后,仍然不能加载MVC项目,可以尝试使用devenv /setup命令。
- SVN管理的文件,删除并提交后仍然可以找回
- 破坏掉数据文件后仍然可以查询,且表空间无法删除
- 成员函数调用delete this的问题
- 更改extension_dir目录和打开extension_mysq.dll后仍然不能调用mysql_connect()函数
- QT之QApplication的exit,quit调用后仍然显示窗口
- Oracle数据库非Dba角色用户使用as sysdba仍然可以连接相关问题
- 如何解决DrawerLayout打开时, main content view 中的按钮仍然可以被点击的问题?
- asp.net退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)
- android 学习笔记3——WebView的使用
- 算法笔记学习000——Smith-Waterman算法寻找两个字符串中匹配度最高的子串
- 小说明
- 《数据结构》第一章知识导图
- 直击用户大脑——用户研究新方法(眼动与脑电数据分析)
- delete后仍然可以调用问题
- ajax简介
- 如何在swift中自定义基本类型Bool
- Cocos2d-x中精灵图片的渲染顺序
- hdu-oj 3351 Seinfeld
- 小贝学习CSS-字体
- UVA1492 - Adding New Machine(扫描线)
- Windows下修改Git bash的HOME路径
- 杭电3351 Seinfeld(贪心)