0

我想将指向对象的指针插入到地图中。这是正确的方法吗?

object myobject[10];
....
mymap.insert( std::pair<int,object*>(pktctr, &myobject[pktctr]));
4

2 回答 2

2

这是正确的方法吗?

是的,尽管如果您使用它可能会更好读make_pair

mymap.insert(std::make_pair(pktctr, &myobject[pktctr]));

或 C++11 语法:

mymap.insert({pktctr, &myobject[pktctr]});

唯一的危险是您必须确保在销毁之前删除指针或销毁地图myobject(或者至少确保此后不再使用指针)。否则,您将有一个悬空指针和整个世界的错误等待发生。

于 2013-09-26T14:15:43.567 回答
2

只要满足以下条件之一,这将有效并且是正确的(即不会导致未定义的行为):

  • mymapmyobject具有相同的生命周期(它们在同一范围内声明):您将确定地图比数组更持久
  • 指针在生命周期结束之前被删除myobject(然后你会有一个悬空指针,一个指向不再存在的东西的指针)

确保pktctr永远不要超过数组的末尾。

最后,这种语法也可以工作:

mymap[pktctr] = &myobject[pktctr];

编辑:

实际上,在 myobject 被销毁之前,我正在清除析构函数中的地图。

那么你不应该有任何悬空指针问题AFAIK。

于 2013-09-26T14:18:19.897 回答