我想将一个指向对象的指针插入到地图中。这是正确的方法吗?
object myobject[10];
....
mymap.insert( std::pair<int,object*>(pktctr, &myobject[pktctr]));
答案 0 :(得分:2)
这是正确的方法吗?
是的,如果您使用make_pair
:
mymap.insert(std::make_pair(pktctr, &myobject[pktctr]));
或C ++ 11语法:
mymap.insert({pktctr, &myobject[pktctr]});
唯一的危险是你必须确保在销毁myobject
之前删除指针或者销毁地图(或者,至少确保指针在此之后从未使用过) 。否则,你将会有一个悬空指针以及等待发生的整个错误世界。
答案 1 :(得分:2)
只要满足以下条件之一,这将有效并且正确(即不会导致未定义的行为):
mymap
和myobject
具有相同的生命周期(它们在相同的范围内声明):您将确定地图比数组更长myobject
生命周期结束之前被删除(那时你将拥有并悬挂指针,指向不再存在的东西)确保pktctr
永远不会越过数组的末尾。
最后,这种语法也可以起作用:
mymap[pktctr] = &myobject[pktctr];
编辑:
实际上,在myobject被销毁之前,我正在析构函数中清除地图。
然后你不应该有任何悬空指针问题AFAIK。