动态转换在其工作的相同功能中失败。 动态转换在调用commitTransaction之前工作,在commitTransaction之后失败。 在commitTransaction中,在执行删除和新操作的地方调用复制操作符。关于这里发生了什么的任何想法?我读到堆损坏可能会导致dynamic_cast失败。任何人都可以解释为什么发生这种情况?动态转换失败原因
#include <iostream>
#include <string>
using namespace std;
#define num 10000
#define numOfWords 10000
class RollbackAllocator
{
public:
int* memBitMap;
RollbackAllocator & operator=(const RollbackAllocator& rollBack)
{
delete[] memBitMap;
if(rollBack.memBitMap)
{
memBitMap = new int[num];
for(int i = 0;i<num;i++)
{
memBitMap[i] = rollBack.memBitMap[i];
}
}
else
{
memBitMap = 0;
}
return *this;
};
void init()
{
memBitMap = new int[num];
}
};
class ResourceAllocator
{
public:
int temp;
virtual int tempMethod(){
temp = 0;
};
};
class KatanaResourceAllocator : public ResourceAllocator
{
public:
RollbackAllocator mIFPBPDUEntryIndexAllocatorNM;
RollbackAllocator mIFPBPDUEntryIndexAllocatorNMShadow;
void commitTransaction()
{
mIFPBPDUEntryIndexAllocatorNMShadow = mIFPBPDUEntryIndexAllocatorNM;
}
};
int main() {
ResourceAllocator * resourceAllocator = new KatanaResourceAllocator();
KatanaResourceAllocator * allocator = dynamic_cast<KatanaResourceAllocator *>(resourceAllocator); //dynamic_cast works fine type().name= P17ResourceAllocator
cout<< " pre allocator=" << allocator;
allocator->mIFPBPDUEntryIndexAllocatorNM.init();
allocator->mIFPBPDUEntryIndexAllocatorNMShadow.init();
allocator->commitTransaction();
allocator = dynamic_cast<KatanaResourceAllocator *>(resourceAllocator); //allocator is null here type().name= P17ResourceAllocator
cout<<" post allocator=" << allocator;
return 0;
}
首先,是否存在memBitMap在被operator =调用之前可以为null的情况?删除缓冲区之前可能需要检查一下。 – AlexG
什么是'cout << typeid(mPPSubSys-> getResourceAllocator())。name'?它不是本身为空吗? –
@AlexG内部不会删除检查null吗? –