析构函数删除指针时遇到问题有问题,请问该怎么解决?
我的部分代码如下:
class SHARE_EXP_CLASS RegisterCommand
{
public:
RegisterCommand(){}
virtual ~RegisterCommand(){}
public:
virtual BOOL CanAddCommand() = 0 ;
virtual BOOL CanRemoveCommand() = 0 ;
virtual void InitCommand() = 0 ;
virtual void UnloadCommand() = 0;
};
class SHARE_EXP_CLASS RegisterCommandCompositor : public RegisterCommand
{
//此处省略部分代码,cpp文件代码也没有附上
protected:
typedef std::map<std::string , RegisterCommand* > RegisterCommandContainer;
RegisterCommandContainer m_RegCmdContainer;
}
class SHARE_EXP_CLASS RegisterCommandManager : public RegisterCommandCompositor
{
//此处省略部分代码
private:
void Init();
void Delete();
protected:
typedef std::map<std::string , CmdFun > RegisterCmdMap;
RegisterCmdMap m_RegCmdMap;
};
类RegisterCommandManager的cpp文件中:(省略其他部分)
RegisterCommandManager::RegisterCommandManager()
{
Init();
}
RegisterCommandManager::~RegisterCommandManager()
{
Delete() ;
}
void RegisterCommandManager::Delete()
{
RegisterCommandContainer::iterator it = m_RegCmdContainer.begin();
int n = m_RegCmdContainer.size();
for( ; it != m_RegCmdContainer.end() ; it++ )
{
RegisterCommand* pCmd = (*it).second;
ASSERT( pCmd != NULL ) ;
delete pCmd ;
}
m_RegCmdContainer.clear() ;
}
现在程序编译通过,但运行关闭程序时经常性(有时也没有)弹出警告:
“"0x02790b8c"指令引用的"0x0276f2f8"内存。该内存不能为"read"。要终止程序,请单击“确定”。”
进行调试,发现n>0,ASSERT通过,但执行语句“delete pCmd ;”时就弹出警告:
“Unhandled exeception in Sptt.exe (GLOBALSHARE.DLL):0xc0000005:Access Violation.”
请问这是什么原因啊?