<?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[Kopier-Operationen: Defaultverhalten mit Anpassungen]]></title><description><![CDATA[<p>Ich habe hier eine Klasse, bei der die default-generierten Kopiermethoden (Copy-Ctor und op=) fast das richtige machen. Das Problem dabei ist das Wörtchen &quot;fast&quot;:</p>
<pre><code class="language-cpp">class koloss;

class part
{
  ...
  koloss* parent;
};

class koloss
{
  //viele kleine Hilfsmember
  vector&lt;part&gt; m_parts;
  ...
};
</code></pre>
<p>Zusätzlich zum Standardverhalten beim Kopieren muß ich noch für jedes Element des kopierten m_parts den parent-Zeiger korrigieren, weil die Teile darüber an die übrigen Elemente des Koloss herankommen.</p>
<p>Die klassische Version wäre es jetzt, alle Member von Hand zu kopieren und zuletzt per <code>for(size_t i=0;i&lt;m_parts.size();++i)m_parts[i].parent=this;</code> die Zeiger geradezubiegen, aber die Klasse befindet sich noch in der Entwicklung - und ich müsste für jeden neuen Member drei Stellen anpassen, um ihn zu integrieren (machbar, aber imho fehleranfällig). Gibt es da vielleicht eine Möglichkeit, die obige for()-Schleife mit den default-generierten Kopiermethoden zu kombinieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185868/kopier-operationen-defaultverhalten-mit-anpassungen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 06:16:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185868.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Jul 2007 10:42:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 10:42:43 GMT]]></title><description><![CDATA[<p>Ich habe hier eine Klasse, bei der die default-generierten Kopiermethoden (Copy-Ctor und op=) fast das richtige machen. Das Problem dabei ist das Wörtchen &quot;fast&quot;:</p>
<pre><code class="language-cpp">class koloss;

class part
{
  ...
  koloss* parent;
};

class koloss
{
  //viele kleine Hilfsmember
  vector&lt;part&gt; m_parts;
  ...
};
</code></pre>
<p>Zusätzlich zum Standardverhalten beim Kopieren muß ich noch für jedes Element des kopierten m_parts den parent-Zeiger korrigieren, weil die Teile darüber an die übrigen Elemente des Koloss herankommen.</p>
<p>Die klassische Version wäre es jetzt, alle Member von Hand zu kopieren und zuletzt per <code>for(size_t i=0;i&lt;m_parts.size();++i)m_parts[i].parent=this;</code> die Zeiger geradezubiegen, aber die Klasse befindet sich noch in der Entwicklung - und ich müsste für jeden neuen Member drei Stellen anpassen, um ihn zu integrieren (machbar, aber imho fehleranfällig). Gibt es da vielleicht eine Möglichkeit, die obige for()-Schleife mit den default-generierten Kopiermethoden zu kombinieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316736</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 12:00:56 GMT]]></title><description><![CDATA[<p>wie war das mit der for_each(...) methode.. das evtl. ne lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316810</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 12:08:51 GMT]]></title><description><![CDATA[<p>Die Schleife als solche ist nicht das Problem (und von Hand geschrieben einfacher als wenn ich noch einen Funktor für for_each() zusammenbauen müsste), das Problem ist es, das Default-Verhalten von op= um diese Schleife zu erweitern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316816</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 12:14:41 GMT]]></title><description><![CDATA[<p>gibts überhaupt die möglichkeit, dass nen default copy-ctor pointer anfasst?</p>
<p>ne variante wäre, die child/parent beziehung an einen controller auszulagern, der objekte nicht anhand ihrer adresse, sondern einer eindeutigen ID identifiziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316823</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 12:40:56 GMT]]></title><description><![CDATA[<p>hola</p>
<p>du koenntest die beiden doch trennen. nen teil den std-ctor machen lassen und den container selber machen</p>
<pre><code class="language-cpp">class koloss;

class part
{
  ...
  koloss* parent;
};

//hier deine vielen kleinen hilfsmember
struct hilfsmember
{
   int irgendwas;
   ...
};

class koloss
{
  //viele kleine Hilfsmember
  hilfsmember member;
  vector&lt;part&gt; m_parts;
  ...

  public:
    koloss(const koloss &amp;k) : member(k.member)
    {
      // hier das manuelle kopieren des kontainers mit parent-berichtigung 
    }
};
</code></pre>
<p>musst deine members nur in der struct 'hilfsmember' aendern oder hinzufuegen</p>
<p>oder vielleicht ne kleine vererbung:</p>
<pre><code class="language-cpp">class koloss;

class part
{
  ...
  koloss* parent;
};

class koloss_privat
{
   // deine member
};

class koloss : public koloss_privat
{
   public:
      koloss(const koloss &amp;k) : koloss_privat(k)
      {
         // hier das manuelle kopieren des kontainers mit parent-berichtigung  
      }
}
</code></pre>
<p>hier halt deine hilfsmember in der koloss_privat hinzufuegen oder aendern</p>
<p>oder hab ich das thema verfehlt ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316846</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 13:51:43 GMT]]></title><description><![CDATA[<p>@Meep Meep : Ich glaube, CStoll meint die Klasse 'part', aber generell ist dein Ansatz ziemlich gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316884</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 14:00:59 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>@Meep Meep : Ich glaube, CStoll meint die Klasse 'part', aber generell ist dein Ansatz ziemlich gut.</p>
</blockquote>
<p>wenn er die klasse 'part' meint, dann seh ich da aber das problem nicht.<br />
schliesslich wuerde sich da am code der klasse 'koloss' sich nix aendern, wenn er part aendern wuerde. oder was seh ich da nicht ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316890</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 14:09:53 GMT]]></title><description><![CDATA[<p>das problem ist, dass der default copy-ctor zwar den vector von koloss - und somit die enthaltenen &quot;part&quot; objekte - korrekt kopiert, aber den &quot;parent&quot; pointer innerhalb der part objekte kopiert er flach, d.h. nur die adresse. somit zeigen alle parent pointer der kopie auf die ursprüngliche instanz von &quot;koloss&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316896</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 14:29:45 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>das problem ist, dass der default copy-ctor zwar den vector von koloss - und somit die enthaltenen &quot;part&quot; objekte - korrekt kopiert, aber den &quot;parent&quot; pointer innerhalb der part objekte kopiert er flach, d.h. nur die adresse. somit zeigen alle parent pointer der kopie auf die ursprüngliche instanz von &quot;koloss&quot;.</p>
</blockquote>
<p>das war mir schon klar.<br />
aber:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>aber die Klasse befindet sich noch in der Entwicklung - und ich müsste für jeden neuen Member drei Stellen anpassen, um ihn zu integrieren (machbar, aber imho fehleranfällig).</p>
</blockquote>
<p>klingt fuer mich so, das er bei einem neuen member der klasse 'koloss' wieder nachbessern muesste. wenn er bei 'part' einen neuen member hinzufuegen wuerde, wuerde des std-ctor den neuen 'part' automatisch richtig kopieren.<br />
vielleicht steh ich auch grad am schlauch.<br />
CStoll, bitte erklaer das nochmal etwas genauer</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316922</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 14:36:43 GMT]]></title><description><![CDATA[<p>habs so verstanden, dass er in koloss diverse objekte einfügen möchte, die nen verweis auf parent besitzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316925</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Mon, 02 Jul 2007 14:54:38 GMT]]></title><description><![CDATA[<p>Klingt ein bißchen böse für mich, aber falls Du den Zuweisungsoperator nicht brauchst, könntest Du Dir das Default verhalten des op= zu nutze machen und danach Deinen Pointer setzten oder fantasiere ich hier gerade?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316951</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Tue, 03 Jul 2007 06:21:53 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>aber die Klasse befindet sich noch in der Entwicklung - und ich müsste für jeden neuen Member drei Stellen anpassen, um ihn zu integrieren (machbar, aber imho fehleranfällig).</p>
</blockquote>
<p>klingt fuer mich so, das er bei einem neuen member der klasse 'koloss' wieder nachbessern muesste. wenn er bei 'part' einen neuen member hinzufuegen wuerde, wuerde des std-ctor den neuen 'part' automatisch richtig kopieren.<br />
vielleicht steh ich auch grad am schlauch.</p>
</blockquote>
<p>Gut zusammengefasst - genau das war mein Kernproblem (*denkt über den Ansatz mit der Auslagerung nach*)</p>
<p>@templäd: Doch, ich brauche das Default-Verhalten, um alle übrigen Member der Koloss-Klasse zuzuweisen (und da sammelt sich leider einiges).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317262</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 03 Jul 2007 06:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopier-Operationen: Defaultverhalten mit Anpassungen on Tue, 03 Jul 2007 08:13:04 GMT]]></title><description><![CDATA[<p>die aufteilung ist gut, allerdings würde ich eher den vector private vererben.</p>
<pre><code class="language-cpp">struct PartHelper
{
    vector&lt;part&gt; m_parts;
    PartHelper(const PartHelper&amp; help):m_parts(help.m_parts)
    {
         for(...)...
    }
};
class Koloss:private PartHelper
{
    //deine Hilfsvariablen
    //default copy ctor reicht ab hier
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1317305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317305</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:13:04 GMT</pubDate></item></channel></rss>