<?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[Problem - Klasse mit String verbinden]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich mache folgendes, um eine neue Instanz einer Klasse über einen String aufzurufen:</p>
<pre><code class="language-cpp">std::map&lt;std::string,MyClass*&gt; m_pCreate;
m_pCreate.insert(std::make_pair(&quot;for&quot;,new MyClass()));

// Neue Instanzen erstellen
MyClass * pmc = m_pCreate[&quot;for&quot;];
MyClass * pmc1 = m_pCreate[&quot;for&quot;];
</code></pre>
<p>Das ganze funktioniert recht gut, nur das problem ist, das pmc und pmc1 auf das selbe objekt verweisen, d.h. wenn ich in pmc1 etwas ändere, so wird es auch in pmc geändert!<br />
Wie kann ich dieses Problem am besten beheben, ohne allzugroße Änderungen durchführen zu müssen?</p>
<p>Danke,</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134448/problem-klasse-mit-string-verbinden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 14:39:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134448.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Jan 2006 08:51:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 08:51:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich mache folgendes, um eine neue Instanz einer Klasse über einen String aufzurufen:</p>
<pre><code class="language-cpp">std::map&lt;std::string,MyClass*&gt; m_pCreate;
m_pCreate.insert(std::make_pair(&quot;for&quot;,new MyClass()));

// Neue Instanzen erstellen
MyClass * pmc = m_pCreate[&quot;for&quot;];
MyClass * pmc1 = m_pCreate[&quot;for&quot;];
</code></pre>
<p>Das ganze funktioniert recht gut, nur das problem ist, das pmc und pmc1 auf das selbe objekt verweisen, d.h. wenn ich in pmc1 etwas ändere, so wird es auch in pmc geändert!<br />
Wie kann ich dieses Problem am besten beheben, ohne allzugroße Änderungen durchführen zu müssen?</p>
<p>Danke,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976594</guid><dc:creator><![CDATA[pixsta]]></dc:creator><pubDate>Thu, 26 Jan 2006 08:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 08:57:09 GMT]]></title><description><![CDATA[<p>Kopiere den Return-Wert und arbeite nicht mit Zeigern.</p>
<p>Bsp:</p>
<pre><code class="language-cpp">int main()
{
    map&lt;string, int&gt; m;
    m.insert(make_pair(&quot;eins&quot;, 1));
    m.insert(make_pair(&quot;zwei&quot;, 2));

    int x = m[&quot;eins&quot;]; // hier Kopie in x speichern.

    x = ...; // jetzt kannst du x verändern, ohne dass dies Auswirkungen auf m[&quot;eins&quot;] hat.
}
</code></pre>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976597</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 26 Jan 2006 08:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:00:13 GMT]]></title><description><![CDATA[<p>In der Map wird auf jeden Fall nur ein Objekt mit dem Index &quot;for&quot; drinstehen, da kannst du machen, was du willst - und jeder Zugriff auf m_pCreate[&quot;for&quot;] wird dir genau dieses Objekt zurückgeben. Du könntest dir bestenfalls lokale Kopien des Objektes anlegen (geeigneter Copy-Ctor vorausgesetzt):</p>
<pre><code class="language-cpp">MyClass mc1=*m_pCreate[&quot;for&quot;];
MyClass mc2=*m_pCreate[&quot;for&quot;];
//nun sind mc1 und mc2 lokale Kopien des Objekts &quot;for&quot; - und damit unabhängig von diesem (und voneinander)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/976602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976602</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:07:10 GMT]]></title><description><![CDATA[<p>Die Klasse &quot;MyClass&quot; ist ein Interface (abstract) und daher geht das mit dem copy-iterator nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976608</guid><dc:creator><![CDATA[pixsta]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:18:12 GMT]]></title><description><![CDATA[<p>es ist ganz normal das bei verwendung einer map von zeigern die pointer mit gleichen namen auch auf die gleiche instanz zeigen</p>
<p>also werden auch änderungen auch bei der _gleichen_ instanz, auf die mit einem _anderen_ pointer gezeigt wird &quot;ankommen&quot;</p>
<p>ich denke du solltest dich etwas mit dem begriff factory auseinandersetzen, denn wirst du automatisch eine korrekte lösung finden</p>
<p>es sollte etwa wie folgt aussehen:</p>
<pre><code class="language-cpp">class MyClass{
....
virtual MyClass* create();///&lt; macht neue instanzen
...
virtual ~MyClass();
}

class m_p_factory {

map&lt;sting,auto_ptr&lt;MyCLass&gt;&gt; creators;// autoptr nimmt mit das ab, was normalerweise im dtor von m_p_factory steht

void register(sting name,MyCLass* class)
{
creators.instert(PAIR(name,autoptr(class); //das ist kein korrektes c++, hätte sonst ctors für autoptr und so anschaun müssen ;P
}
MyClass* create(string name)
{
return creators[string]-&gt;create();
}
} // end class m_p_factory
</code></pre>
<p>[edit]<br />
glaub jezze hab ich alle typo'S</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976610</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:19:27 GMT]]></title><description><![CDATA[<p>Kurze Zwischenfrage: Wozu brauchst du eigentlich zwei unabhängige Kopien deines Objekts?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976615</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:23:32 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<p>Kurze Zwischenfrage: Wozu brauchst du eigentlich zwei unabhängige Kopien deines Objekts?</p>
</blockquote>
<p>Ich habe ein skript in xml vorliegen.<br />
Also z.b.</p>
<pre><code>&lt;for&gt;
...
&lt;/for&gt;
</code></pre>
<p>soll die Klasse mit dem Namen &quot;for&quot; aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976620</guid><dc:creator><![CDATA[pixsta]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:25:03 GMT]]></title><description><![CDATA[<p>er will unabhängige instanzen, von ___verschiedenen___ klassen erzeugen<br />
also muss er die irgendwie erfragen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976623</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 09:32:23 GMT]]></title><description><![CDATA[<p>OK, wenn die direkte Zuweisung so nicht geht, schreib dir eine virtuelle Methode copy(), die jeweils eine Kopie deines Objektes anlegt:</p>
<pre><code class="language-cpp">class base
{
public:
  ...
  base* copy() const = 0;
  ...
}

class forClass : public MyClass
{
public:
  forClass(const forClass&amp; other) {...}
  ...
  base* copy() const
  {
    return new forClass(*this);
  }
  ...
}

map&lt;string,base*&gt; classes;
classes.insert(make_pair(&quot;for&quot;,new forClass(...)));
...
string input/* =&quot;for&quot; */;
base* mc = classes[input].copy();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/976631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976631</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Klasse mit String verbinden on Thu, 26 Jan 2006 10:02:41 GMT]]></title><description><![CDATA[<p>Danke für eure schnelle und kompetente hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976658</guid><dc:creator><![CDATA[pixsta]]></dc:creator><pubDate>Thu, 26 Jan 2006 10:02:41 GMT</pubDate></item></channel></rss>