 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Hendrik Wendler Guest
|
Posted: Sat Feb 18, 2006 8:41 pm Post subject: keine kopie bei std::make_pair |
|
|
Hi de.c++,
ich kämpfe seit einigen tagen schon mit einem
für mich unverständlichen problem.
in einer multithreaded app speichert ein
netz-thread osc-kommandos die via udp reingereicht
werden in einer map, die folegendermassen
definiert ist:
typedef std::map<std::string, osc::ReceivedMessage> type_oscqueue;
wenn der netz-thread ein kommando bekommt,
ruft er diese funktion auf:
void append(const osc::ReceivedMessage &m)
darin wird eingefügt:
{
[somecriticalsection]
oscqueue.insert(std::make_pair(m.AddressPattern(),m));
}
also nach meinem verständnis sollte std::make_pair
eine KOPIE von 'm' anlegen, und diese unter
einem key (die lauten bei osc so "/xxx/yyy" wenns interessiert)
in der map speichern.
ABER
leider ist beim zweiten aufruf der funktion
mit zwei unterschiedlichen messages in der map
ZWEI einträge mit UNTERSCHIEDLICHEM KEY
aber derselben 'm':
[0] ("/app/track/2",{addressPattern_=0x0a32f238 "/mxw/track/3"
typeTagsBegin_=0x0a32f249 "f" typeTagsEnd_=0x0a32f24a "" ...})
[1] ("/app/track/3",{addressPattern_=0x0a32f238 "/mxw/track/3"
typeTagsBegin_=0x0a32f249 "f" typeTagsEnd_=0x0a32f24a "" ...})
irgendwie ist beim ersten eintrag nur eine
referenz gespeichert worden.
aber std::make_pair sollte doch eine kopie
erzeugen?
besten gruss,
danke für jeden tip,
hendrik
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Feb 19, 2006 10:06 pm Post subject: Re: keine kopie bei std::make_pair |
|
|
Hendrik Wendler <hendrik--nospam--@mxwendler.de> writes:
| Quote: | ich kämpfe seit einigen tagen schon mit einem
für mich unverständlichen problem.
in einer multithreaded app speichert ein
netz-thread osc-kommandos die via udp reingereicht
werden in einer map, die folegendermassen
definiert ist:
typedef std::map<std::string, osc::ReceivedMessage> type_oscqueue;
wenn der netz-thread ein kommando bekommt,
ruft er diese funktion auf:
void append(const osc::ReceivedMessage &m)
darin wird eingefügt:
{
[somecriticalsection]
oscqueue.insert(std::make_pair(m.AddressPattern(),m));
}
|
Bitte poste ein minimales (<50 Zeilen), komplettes (übersetzbares)
Programm, das das Problem demonstriert.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|