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]));
これは、次のいずれかが保持されている限り、正しく機能します (つまり、未定義の動作が発生することはありません)。
mymap
同じ有効期間をmyobject
持ちます(同じスコープで宣言されました):マップが配列よりも長持ちすることが確実になりますmyobject
寿命が終わる前に削除されます (その場合、ぶら下がっているポインターがあり、もう存在しない何かへのポインターになります)pktctr
配列の最後を超えないようにしてください。
最後に、この構文も機能します。
mymap[pktctr] = &myobject[pktctr];
編集:
実際には、myobject が破棄される前にデストラクタでマップをクリアしています。
そうすれば、ダングリングポインターの問題が発生することはありません。