我必须修复典型的内存泄漏,问题是这样的:
typedef std::map<unsigned long,Response> mapType;
class Response
{
public:
void *dataPtr;
unsigned long tag;
}
class anyClass
{
public::
DataType x;
}
从客户端,我正在获取mapType类型的映射,该映射的Response对象为map-> second,因为Response对象包含一个无效的Pointer。
请注意:Response类不知道已将哪种类型的数据设置为void指针,我也无法修改Response类,因为它是遗留代码,并且会产生很大的影响:(
现在使用map-> first,我称之为Tag,
我在运行时使用此标签使用此标签,我对类anyClass有所了解。
现在Response :: dataPtr是smany作为anyClass :: DataType
但:
因为类anyClass是N类型中的一种,所以anyClass :: DataType对于每个类都是不同的,我只在运行时才知道。
请指导我如何将void指针类型转换为anyClass :: DataType并释放它
最佳答案
鉴于您提到了“旧版”代码,但可能有一些修改的自由,所以我可能建议将提供地图的任何接口扩展为包括释放功能。
然后,它可以应用与最初创建对象时相同的类型逻辑。
如果那是不可能的,那么您很可能会得到一个case语句和一些重新解释的强制类型转换,例如以下伪代码:
switch (type ) {
case Type1:
delete reinterpret_cast<Type1Class*>(ptr);
break;
case Type2:
...
祝好运