我的程序出现了问题,不是编译错误也不是运行时错误,debug下没有内存泄漏,但是release下发生了意想不到的行为,变量初始化方面没有错误。
现在唯一让我怀疑的地方就是:我用CObList保存了不同类型的对象,这些类都是一个类的子类。详细描述如下:CMesh 父类:网格
CMeshSphere 子类:球体网格
CMeshCylinder 子类:圆柱体网格
CMeshBox 子类:盒子网格
CMeshText 子类:文字网格CScene:场景类
场景类中用来保存网格的成员变量:CObList mMeshList;向场景中添加网格:
void CScene::add( CMesh* pMesh )
{
mMeshList.AddTail((CObject*)pMesh);
}清除场景中的网格:
void CScene::clearScene()
{
CMesh pMesh;
POSITION aPosition;
aPosition = mMeshList.GetHeadPosition();
while (aPosition)
{
pMesh = (Mesh*)mMeshList.GetNext(aPosition);
SAFE_DELETE(pMesh);
}
mMeshList.RemoveAll();
}现在的问题是:
在clearScene方法中我把mMeshList中的指针强制转换成父类的指针,这样是否安全?是否会有截断的危险?
如果这样不安全,我应该怎么处理这样的情况?
如果认为这样设计根本就是错误的,那应该如何是好?
我也尝试了用std::vector<CMesh*> mMeshList; 但是问题依旧,如果熟悉vector也可以用vector描述答案。
谢谢!
现在唯一让我怀疑的地方就是:我用CObList保存了不同类型的对象,这些类都是一个类的子类。详细描述如下:CMesh 父类:网格
CMeshSphere 子类:球体网格
CMeshCylinder 子类:圆柱体网格
CMeshBox 子类:盒子网格
CMeshText 子类:文字网格CScene:场景类
场景类中用来保存网格的成员变量:CObList mMeshList;向场景中添加网格:
void CScene::add( CMesh* pMesh )
{
mMeshList.AddTail((CObject*)pMesh);
}清除场景中的网格:
void CScene::clearScene()
{
CMesh pMesh;
POSITION aPosition;
aPosition = mMeshList.GetHeadPosition();
while (aPosition)
{
pMesh = (Mesh*)mMeshList.GetNext(aPosition);
SAFE_DELETE(pMesh);
}
mMeshList.RemoveAll();
}现在的问题是:
在clearScene方法中我把mMeshList中的指针强制转换成父类的指针,这样是否安全?是否会有截断的危险?
如果这样不安全,我应该怎么处理这样的情况?
如果认为这样设计根本就是错误的,那应该如何是好?
我也尝试了用std::vector<CMesh*> mMeshList; 但是问题依旧,如果熟悉vector也可以用vector描述答案。
谢谢!
解决方案 »
- 子类化IP Address Control问题,求高手指点
- 鼠标移动到tabctrl控件响应事件,感激不尽
- vc怎么屏蔽word的复制粘贴操作啊
- 自绘菜单对于位图菜单是不是Windows不发送WM_MEASUREITEM消息?
- MFC视图中, 如何将一个小的BMP图片显示在视图的特定位置 ? 谢谢
- IE工具条问题,如何注册之后,直接显示出来?
- 算分了,愚人节到了
- 现在的问题是,程序运行后,总显示第一页,我想让它一开始就显示第二页。我想给它发送一个TCN_SELCHANGE消息,但总是不成功。大家帮忙!
- 如何创建一个字符串指定的目录(包括子目录)?
- 在MFC中使用SQL语句
- 一个很基础的东西,
- 取mac地址出现的问题!!!谢谢高手帮我看看!!!
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
mMeshList只给每个指针分配4个字节大的空间, 然后加前后指针
这个问题已经困扰我很长时间了,快要疯掉了!