<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[werden bei std::map Daten kopiert?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wenn ich in einer std::map Werte/Objekte einfüge, werden diese kopiert oder wird da nur irgendeine Referenz verwendet? Wird da auch ein Copyconstruktor verwendet?</p>
<p>Ich möchte gerne sowas machen (habe mit maps nur wenig gearbeitet):</p>
<pre><code>class Daten
{
public:
	Daten():val(0){}
	~Daten(){}

	int val; // ja ist hier mal öffentlich gemacht ;)
};

class MeineKlasse
{
public:
	MeineKlasse(){}
	~MeineKlasse(){}

	void setDaten(int id, Daten const &amp;daten) // neue hinzufügen / bestehende überschreiben
	{
		meineMap[id] = daten;
	}

	Daten getDaten(int id) const
	{
		if (meineMap.find(id) == meineMap.end())
		{
			throw &quot;Fehler&quot;;
		}
		return meineMap.at(id);
	}

	Daten &amp;getDatenReferenz (int id)  // oder lieber so?
	{
		if (meineMap.find(id) == meineMap.end())
		{
			throw &quot;Fehler&quot;;
		}
		return meineMap.at(id);
	}

	void verarbeiteDaten(int id)
	{
		if (meineMap.find(id) != meineMap.end())
		{
			// variante 1: direkt schreiben
			meineMap.at(id).val = 123456;

			// variante 2: kopie anlegen und anschließend wieder einfügen
			Daten daten1 = meineMap.at(id);
			daten1.val = 123456;
			setDaten(id, daten1);

			// variante 3: mit referenz
			Daten &amp;daten2 = meineMap.at(id);
			daten2.val = 123456;
			setDaten(id, daten2); // --&gt; diese Zeile müsste doch überflüssig sein, oder?
		}
	}

private:
	std::map &lt;int, Daten&gt; meineMap;
};
</code></pre>
<p>Anwendung:</p>
<pre><code>MeineKlasse mk;
Daten daten;

daten.val = 12345;

// wert setzen
mk.setDaten(123, daten);
</code></pre>
<p>Wird jetzt eine Kopie von 'daten' angelegt? Braucht man einen speziellen konstruktor? Wie sieht es mit dem Freigeben aus. Muss ich da auch etwas beachten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>viele Grüße,<br />
SBond</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338563/werden-bei-std-map-daten-kopiert</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:15:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338563.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Jun 2016 19:55:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Thu, 23 Jun 2016 19:55:02 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wenn ich in einer std::map Werte/Objekte einfüge, werden diese kopiert oder wird da nur irgendeine Referenz verwendet? Wird da auch ein Copyconstruktor verwendet?</p>
<p>Ich möchte gerne sowas machen (habe mit maps nur wenig gearbeitet):</p>
<pre><code>class Daten
{
public:
	Daten():val(0){}
	~Daten(){}

	int val; // ja ist hier mal öffentlich gemacht ;)
};

class MeineKlasse
{
public:
	MeineKlasse(){}
	~MeineKlasse(){}

	void setDaten(int id, Daten const &amp;daten) // neue hinzufügen / bestehende überschreiben
	{
		meineMap[id] = daten;
	}

	Daten getDaten(int id) const
	{
		if (meineMap.find(id) == meineMap.end())
		{
			throw &quot;Fehler&quot;;
		}
		return meineMap.at(id);
	}

	Daten &amp;getDatenReferenz (int id)  // oder lieber so?
	{
		if (meineMap.find(id) == meineMap.end())
		{
			throw &quot;Fehler&quot;;
		}
		return meineMap.at(id);
	}

	void verarbeiteDaten(int id)
	{
		if (meineMap.find(id) != meineMap.end())
		{
			// variante 1: direkt schreiben
			meineMap.at(id).val = 123456;

			// variante 2: kopie anlegen und anschließend wieder einfügen
			Daten daten1 = meineMap.at(id);
			daten1.val = 123456;
			setDaten(id, daten1);

			// variante 3: mit referenz
			Daten &amp;daten2 = meineMap.at(id);
			daten2.val = 123456;
			setDaten(id, daten2); // --&gt; diese Zeile müsste doch überflüssig sein, oder?
		}
	}

private:
	std::map &lt;int, Daten&gt; meineMap;
};
</code></pre>
<p>Anwendung:</p>
<pre><code>MeineKlasse mk;
Daten daten;

daten.val = 12345;

// wert setzen
mk.setDaten(123, daten);
</code></pre>
<p>Wird jetzt eine Kopie von 'daten' angelegt? Braucht man einen speziellen konstruktor? Wie sieht es mit dem Freigeben aus. Muss ich da auch etwas beachten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>viele Grüße,<br />
SBond</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2499951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2499951</guid><dc:creator><![CDATA[SBond]]></dc:creator><pubDate>Thu, 23 Jun 2016 19:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Thu, 23 Jun 2016 21:12:22 GMT]]></title><description><![CDATA[<p>Ja, es wird kopiert.</p>
<p>Was sollen die leeren Konstruktoen und Destruktoren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2499957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2499957</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 23 Jun 2016 21:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Thu, 23 Jun 2016 21:26:58 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Ja, es wird kopiert.</p>
<p>Was sollen die leeren Konstruktoen und Destruktoren?</p>
</blockquote>
<p>super. Die haben keine weiteren Bedeutung. Habe das Beispiel schnell zusammengetippt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2499959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2499959</guid><dc:creator><![CDATA[SBond]]></dc:creator><pubDate>Thu, 23 Jun 2016 21:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Fri, 24 Jun 2016 10:23:57 GMT]]></title><description><![CDATA[<p>SBond schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Ja, es wird kopiert.</p>
<p>Was sollen die leeren Konstruktoen und Destruktoren?</p>
</blockquote>
<p>super. Die haben keine weiteren Bedeutung. Habe das Beispiel schnell zusammengetippt.</p>
</blockquote>
<p>Jemanden, der leere Konstruktoen und Destruktoren schreibt, wenn er &quot;das Beispiel schnell zusammengetippt&quot;, verdächtige ich, dies gewohnheitsmäßig zu tun <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500017</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 24 Jun 2016 10:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Fri, 24 Jun 2016 13:19:52 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Jemanden, der leere Konstruktoen und Destruktoren schreibt, wenn er &quot;das Beispiel schnell zusammengetippt&quot;, verdächtige ich, dies gewohnheitsmäßig zu tun <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ja... dafür bin ich in der Tat unglaublich anfällig. Wahrscheinlich kommt es daher, dass man so etwas häufig in tutorials/Beispiele sieht. Habe es mir irgendwie so angewöhnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ist das eigentlich problematisch oder einfach nur überflüssig ...so ein leerer konstruktor?</p>
<p>...ich würde zu gene wissen was ich sonst noch so für dumme Designfehler mache. In 10 Jahren werde ich wahrscheinlich über meinen eigenen Code den Kopf schütteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500041</guid><dc:creator><![CDATA[SBond]]></dc:creator><pubDate>Fri, 24 Jun 2016 13:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Fri, 24 Jun 2016 13:43:26 GMT]]></title><description><![CDATA[<p>SBond schrieb:</p>
<blockquote>
<p>...ich würde zu gene wissen was ich sonst noch so für dumme Designfehler mache. In 10 Jahren werde ich wahrscheinlich über meinen eigenen Code den Kopf schütteln.</p>
</blockquote>
<p>Gib dir ein halbes Jahr, und du wirst dich selbst verfluchen. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500047</guid><dc:creator><![CDATA[dachschaden_off]]></dc:creator><pubDate>Fri, 24 Jun 2016 13:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Fri, 24 Jun 2016 13:54:11 GMT]]></title><description><![CDATA[<p>Lass leere Konstruktoren einfach weg.</p>
<p>Oder schreib explizit hin, dass du den Default-Konstruktor haben willst:</p>
<pre><code>class Kasse {
    Klasse() = default;
...
}
</code></pre>
<p>Siehe z.B. hier, warum das einen Unterschied machen kann (schau dir die Beispiele an):<br />
<a href="http://en.cppreference.com/w/cpp/language/value_initialization" rel="nofollow">http://en.cppreference.com/w/cpp/language/value_initialization</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500049</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Fri, 24 Jun 2016 13:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to werden bei std::map Daten kopiert? on Fri, 24 Jun 2016 14:16:58 GMT]]></title><description><![CDATA[<p>oh ha...</p>
<p>gut zu wissen. Da kann ich mir ja das manuelle initialisieren der Variablen ja sparen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500055</guid><dc:creator><![CDATA[SBond]]></dc:creator><pubDate>Fri, 24 Jun 2016 14:16:58 GMT</pubDate></item></channel></rss>