0

I want to insert a pointer to object into a map. Is this the right way?

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

2 に答える 2

2

これは、次のいずれかが保持されている限り、正しく機能します (つまり、未定義の動作が発生することはありません)。

  • mymap同じ有効期間をmyobject持ちます(同じスコープで宣言されました):マップが配列よりも長持ちすることが確実になります
  • ポインターはmyobject寿命が終わる前に削除されます (その場合、ぶら下がっているポインターがあり、もう存在しない何かへのポインターになります)

pktctr配列の最後を超えないようにしてください。

最後に、この構文も機能します。

mymap[pktctr] = &myobject[pktctr];

編集:

実際には、myobject が破棄される前にデストラクタでマップをクリアしています。

そうすれば、ダングリングポインターの問題が発生することはありません。

于 2013-09-26T14:18:19.897 に答える