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