我必须修复典型的内存泄漏,问题是这样的:

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:
      ...


祝好运

07-24 09:46
查看更多