首页
社区
课程
招聘
[求助]NDK c++ 哈希
发表于: 2015-5-20 16:44 4968

[求助]NDK c++ 哈希

2015-5-20 16:44
4968
请教一个困扰我好几天的知识点,谢谢大牛牛的指点!问题描述如下:

使用unordered_hashmap存储结构,定义为
unordered_map<string, ApiHooker> mApiHookerHashMap;

插入部分代码如下(StartThreadApiHooker是ApiHooker的子类):
StartThreadApiHooker* start = new StartThreadApiHooker();
mApiHookerHashMap.insert(make_pair("start", *start));

但当我再次从哈希表中取出元素时,元素的类型是ApiHooker,而不是StartThreadApiHooker,代码如下:
auto iElementFound = ApiHookerManager::getInstance()->mApiHookerHashMap.find(temp);
if(iElementFound != ApiHookerManager::getInstance()->mApiHookerHashMap.end()){
        LOGD("find %s in mApiHookerHashMap",temp);
}
else
        LOGE( "Key has no corresponding value in unordered map!");
ApiHooker* tempApiHooker = &(iElementFound->second);
tempApiHooker->parseParameter();//此处调用的是ApiHooker的方法,不是StartThreadApiHooker的方法

请问,是我操作不当,还是我存储到哈希表中是什么类型,那么我取到的就是什么类型,这么地方无法使用多态?

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
2
unordered_map<string, ApiHooker*> mApiHookerHashMap;
用引用或者指针才会有多态,你这个都切割了。叫做object slicing
2015-5-20 16:59
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
mApiHookerHashMap.insert(make_pair("start", *start)); 有一次拷贝构造,实际存入map的是start构造的类型为ApiHooker的新类。

你的map应该是unordered_map<string, shared_ptr<ApiHooker> > , 存类指针。避免拷贝构造。
2015-5-20 17:01
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哎幺,竟然这么地方没注意到,确实是的。谢谢!
2015-5-20 17:12
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
嗯哪,问题确实是这样的,谢谢啦。
2015-5-20 17:13
0
游客
登录 | 注册 方可回帖
返回
//