<?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[Klassendesign: Verbietet ihr alles was ihr nicht braucht?]]></title><description><![CDATA[<p>Hallo,</p>
<p>man kann ja das Kopieren, Zuweisen und auch sämtliche Operatoren einer Klasse verbieten, indem man die entsprechenden Methoden private/explicit macht. Die wenigsten Klassen, die ich so geschrieben habe, sollen kopiert, zugewiesen oder sonst wie mit Operatoren behandelt werden.</p>
<p>Wenn ihr solche Klassen habt, verbietet ihr dann wirklich jeden Operator extra, weil das sind ja schon eine ganze Menge? Oder wie soll sonst der Anwender mitbekommen, dass er Objekte der Klassen beispielsweise nicht inkrementieren kann/soll?</p>
<p>Ich hoffe es versteht einer was ich meine^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309063/klassendesign-verbietet-ihr-alles-was-ihr-nicht-braucht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 11:18:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309063.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Oct 2012 09:13:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sat, 13 Oct 2012 09:13:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>man kann ja das Kopieren, Zuweisen und auch sämtliche Operatoren einer Klasse verbieten, indem man die entsprechenden Methoden private/explicit macht. Die wenigsten Klassen, die ich so geschrieben habe, sollen kopiert, zugewiesen oder sonst wie mit Operatoren behandelt werden.</p>
<p>Wenn ihr solche Klassen habt, verbietet ihr dann wirklich jeden Operator extra, weil das sind ja schon eine ganze Menge? Oder wie soll sonst der Anwender mitbekommen, dass er Objekte der Klassen beispielsweise nicht inkrementieren kann/soll?</p>
<p>Ich hoffe es versteht einer was ich meine^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259898</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Oct 2012 09:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sat, 13 Oct 2012 09:16:07 GMT]]></title><description><![CDATA[<p>um ehrlich zu sein verstehe ich nicht, was du meinst. bis auf die großen drei(op=, copy ctor default ctor) erzeugt der Compiler keine weiteren Methoden. Wenn du auf einer beliebigen deiner Klassen op++ aufrufst, kriegst du einen Compilerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259899</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 13 Oct 2012 09:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sat, 13 Oct 2012 09:18:03 GMT]]></title><description><![CDATA[<p>Du hast explicit nicht verstanden, das hat damit so erstmal nichts zu tun.<br />
Zu deiner Frage: Ja, ich mache alles private was logisch private sein sollte. Das hat weniger was damit zu tun ob ich es außerhalb der Klasse brauche oder nicht. Entweder es gibt eine logische Möglichkeit ein Objekt der Klasse zu kopieren, oder eben nicht. Aber so viel Aufwand ist das nun nicht:</p>
<pre><code class="language-cpp">class foo
{
  // ...
private:
  foo(const foo&amp;);
  foo&amp; operator = (const foo&amp;);
};
</code></pre>
<p>Fertig. <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/2259901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259901</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 13 Oct 2012 09:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sat, 13 Oct 2012 09:33:27 GMT]]></title><description><![CDATA[<p>Verhindere ich mit explicit vor einem Konstruktor nicht dass ich ihm dann nichts zuweisen kann?</p>
<p>Ich hatte gedacht dass der Compiler auch automatisch die Operatoren anlegt, wie beim Kon-/Destruktor etc., dass war mein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259903</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Oct 2012 09:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sat, 13 Oct 2012 20:04:27 GMT]]></title><description><![CDATA[<p>Mit explicit verhinderst du nur implizite Konvertierung.<br />
Direkte Zuweisung (=ohne implizite Konvertierung) bzw. das Erzeugen von Kopien verhinderst du dadurch nicht.</p>
<p>Und ja, natürlich mache ich alle Klassen non-copyable und non-assignable wenn der implizit definierte Copy-Ctor oder Assignment-Operator Mist bauen würde.<br />
Ausgenommen natürlich die Klassen die kopierbar oder zuweisbar sein sollen/müssen, in dem Fall definiere ich dann eben selbst einen passenden Copy-Konstruktor/Assignment-Operator.</p>
<p>ps:<br />
Wenn man nicht in jeder &quot;noncopyable&quot; Klasse den Copy-Konstruktor und Assignent-Operator private machen will bietet sich boost::noncopyable an.<br />
Finde ich auch übersichtlicher/leserlicher</p>
<pre><code class="language-cpp">class Foo : private boost::noncopyable
{
...
};
</code></pre>
<p>Bzw. wenn man Boost nicht verwenden will/kann ist so eine &quot;noncopyable&quot; Klasse auch in ein paar Sekunden selbst geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260120</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 13 Oct 2012 20:04:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Sun, 14 Oct 2012 23:12:16 GMT]]></title><description><![CDATA[<p>Unter C++11 gibt es auch die Möglichkeit mit</p>
<pre><code class="language-cpp">= delete;
</code></pre>
<p>was ich persönlich schöner finde. Die großen 5 (C++11) deklariere ich immer. Wenn ich sie nicht selbst implementiere, deklariere ich sie mit</p>
<pre><code class="language-cpp">= default;
</code></pre>
<p>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260482</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Sun, 14 Oct 2012 23:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 03:58:14 GMT]]></title><description><![CDATA[<p>Ich kenne nur die Rulez-of-three, es gibt auch the-big-five? Hast du einen speziellen Compiler, weil es werden nur ctor, dtor, copy, assignment von alleine angelegt und wenn man einen von den dreien(dtor,copy,assign) anlegt, sollte man auch die anderen beiden implementieren. Warum steht z.B. in effective C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260501</guid><dc:creator><![CDATA[_sone_dreck]]></dc:creator><pubDate>Mon, 15 Oct 2012 03:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 06:05:46 GMT]]></title><description><![CDATA[<p>_sone_dreck schrieb:</p>
<blockquote>
<p>es werden nur ctor, dtor, copy, assignment von alleine angelegt</p>
</blockquote>
<p>In C++11 kommen noch move-Ctor und move-Assignment dazu...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260520</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 06:05:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 06:20:01 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>_sone_dreck schrieb:</p>
<blockquote>
<p>es werden nur ctor, dtor, copy, assignment von alleine angelegt</p>
</blockquote>
<p>In C++11 kommen noch move-Ctor und move-Assignment dazu...</p>
</blockquote>
<p>Noch nicht ganz wach? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Die werden so nicht automatisch generiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260524</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 15 Oct 2012 06:20:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 06:46:20 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>_sone_dreck schrieb:</p>
<blockquote>
<p>es werden nur ctor, dtor, copy, assignment von alleine angelegt</p>
</blockquote>
<p>In C++11 kommen noch move-Ctor und move-Assignment dazu...</p>
</blockquote>
<p>Noch nicht ganz wach? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Die werden so nicht automatisch generiert.</p>
</blockquote>
<p>Ich liefer gleich den Standard:</p>
<p>N3337 §12.8 Klausel 9 schrieb:</p>
<blockquote>
<p>If the definition of a class X does not explicitly declare a move constructor, one will be implicitly declared<br />
as defaulted if and only if<br />
— X does not have a user-declared copy constructor,<br />
— X does not have a user-declared copy assignment operator,<br />
— X does not have a user-declared move assignment operator,<br />
— X does not have a user-declared destructor, and<br />
— the move constructor would not be implicitly defined as deleted.</p>
</blockquote>
<p>N3337 §12.8 Klausel 20 schrieb:</p>
<blockquote>
<p>If the definition of a class X does not explicitly declare a move assignment operator, one will be implicitly<br />
declared as defaulted if and only if<br />
— X does not have a user-declared copy constructor,<br />
— X does not have a user-declared move constructor,<br />
— X does not have a user-declared copy assignment operator,<br />
— X does not have a user-declared destructor, and<br />
— the move assignment operator would not be implicitly defined as deleted.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2260535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260535</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 15 Oct 2012 06:46:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 07:05:37 GMT]]></title><description><![CDATA[<p>Genau was ich sagte..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260540</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 15 Oct 2012 07:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 07:16:34 GMT]]></title><description><![CDATA[<p>N3337 §12.8 Klausel 9 schrieb:</p>
<blockquote>
<p>— the move constructor would not be implicitly defined as deleted.</p>
</blockquote>
<p>Wann gilt der Punkt denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260542</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 15 Oct 2012 07:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 07:45:23 GMT]]></title><description><![CDATA[<p>Cyres schrieb:</p>
<blockquote>
<p>Die großen 5 (C++11) deklariere ich immer.</p>
</blockquote>
<p>Lustig, ich fast nie.</p>
<p>Zumindest was die Grossen Drei angeht, sehe ich es von Vorteil, wenn die Member bereits Wertsemantik besitzen und automatisch kopiert werden. Das spart viel Boilerplatecode und auch mögliche Fehler, weil die Kopie eines Members vergessen wird. Bei Klassen, die Exceptions werfen, muss man allerdings etwas aufpassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260546</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 15 Oct 2012 07:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 08:00:10 GMT]]></title><description><![CDATA[<p>Nein, implementiert werden sie nicht implizit, allerdings ist es von Vorteil, falls sie vorhanden sind.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Cyres schrieb:</p>
<blockquote>
<p>Die großen 5 (C++11) deklariere ich immer.</p>
</blockquote>
<p>Lustig, ich fast nie.</p>
</blockquote>
<p>Ich persönlich finde es übersichtlicher, und auf die zwei Zeilen Code kommt es dann echt nicht mehr an. Rein Interesse halber, benutzt (falls du die Wahl hast) du &quot;#pragma once&quot; oder lieber Header-Guards?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260550</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 15 Oct 2012 08:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 08:11:50 GMT]]></title><description><![CDATA[<p>Wann immer möglich <code>#pragma once</code> . In einer plattformunabhängigen Bibliothek allerdings Header-Guards.</p>
<p>Hm, fast alle aktuellen Compiler scheinen <code>#pragma once</code> zu unterstützen. Kennt ihr Beispiele, wo es nicht funktioniert? Sonst überlege ich mir, das auch in portablem Code zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260554</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 15 Oct 2012 08:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 08:14:56 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wann immer möglich <code>#pragma once</code> . In einer plattformunabhängigen Bibliothek allerdings Header-Guards.</p>
<p>Hm, fast alle aktuellen Compiler scheinen <code>#pragma once</code> zu unterstützen. Kennt ihr Beispiele, wo es nicht funktioniert? Sonst überlege ich mir, das auch in portablem Code zu verwenden.</p>
</blockquote>
<p>Mir sind keine Probleme bekannt, als ich rausgefunden habe, dass auch der GCC (und Clang) <code>#pragma once</code> unterstützen, hatte ich auch viel geändert, ich frage deshalb, weil da wieder die beiden Zeilen wären, die man sich bei <code>#pragma once</code> sparen würde <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260557</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 15 Oct 2012 08:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 08:45:12 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Genau was ich sagte..</p>
</blockquote>
<p>Nope. Du sagtest &quot;die werden nicht automatisch generiert&quot;. Werden sie aber doch, wenn alle anderen auch automatisch generiert werden.</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>N3337 §12.8 Klausel 9 schrieb:</p>
<blockquote>
<p>— the move constructor would not be implicitly defined as deleted.</p>
</blockquote>
<p>Wann gilt der Punkt denn?</p>
</blockquote>
<p>Ich überlasse das Flöhen des Standards an der Stelle mal anderen, aber da der generierte Move-Ctor einfach alle Member moved, würde ich mal annehmen, dass das dann der Fall ist, wenn einer der Member nicht movable ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260568</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 08:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 08:50:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Kennt ihr Beispiele, wo es nicht funktioniert?</p>
</blockquote>
<p>IBM XL C++ for AIX <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>
<p>Meines Wissens erkenne viele Präprozessoren include-Guards aber als das was sie sind und haben eine spezielle Merkvorrichtung dafür, d.h. #pragma once ist dann auch nicht schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260569</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 08:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 09:08:16 GMT]]></title><description><![CDATA[<p>nahezu alle Borland bzw. CodeGear Compiler erkennen es auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260576</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 15 Oct 2012 09:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 09:18:34 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Cyres schrieb:</p>
<blockquote>
<p>Die großen 5 (C++11) deklariere ich immer.</p>
</blockquote>
<p>Lustig, ich fast nie.</p>
<p>Zumindest was die Grossen Drei angeht, sehe ich es von Vorteil, wenn die Member bereits Wertsemantik besitzen und automatisch kopiert werden. Das spart viel Boilerplatecode und auch mögliche Fehler, weil die Kopie eines Members vergessen wird. Bei Klassen, die Exceptions werfen, muss man allerdings etwas aufpassen...</p>
</blockquote>
<p>Kannst du bitte das etwas genauer erklären, warum es bei Klassen die Execptions werfen schwieriger ist die rulez-of-three zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260581</guid><dc:creator><![CDATA[_sone_dreck]]></dc:creator><pubDate>Mon, 15 Oct 2012 09:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 10:44:01 GMT]]></title><description><![CDATA[<p>_sone_dreck schrieb:</p>
<blockquote>
<p>Kannst du bitte das etwas genauer erklären, warum es bei Klassen die Execptions werfen schwieriger ist die rulez-of-three zu implementieren?</p>
</blockquote>
<p>Es geht vor allem darum, was passiert wenn die entsprechenden Operationen der Member Exceptions werfen. Beispiel:</p>
<pre><code class="language-cpp">class AssignmentThrows; //Name sagt alles...

class Problematic
{
  int* p1;
  AssignmentThrows at;
  int* p2;

  //INVARIANTE: p2 &gt; p1
};
</code></pre>
<p>So, was passiert, wenn ich ein &quot;Problematic&quot; einem anderen zuweise?<br />
p1 wird kopiert. OK. at wird kop...BUMM<br />
Übrig bleibt ein &quot;Problematic&quot;, bei dem p1 geändert wurde, p2 aber nicht. Die Invariante wird vermutlich nicht mehr gelten, und alles was sich darauf verlässt (z.B. der Destruktor) spielt Russisch Roulette. Kurz: der default-generierte op= ist nicht exceptoinsicher.<br />
Das ist jetzt ein sehr merkwürdig konstruiertes Beispiel, aber es zeigt die Problematik, und die gibts in allen Formen, Farben und Geschmacksrichtungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260630</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 10:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 12:55:49 GMT]]></title><description><![CDATA[<p>Da nimmt man ja auch std::unique_ptr wenn p1 ein Objekt hält, ansonsten eben gleich ein Int anstelle eines Pointers auf int nutzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Oder liege ich da so falsch?</p>
<p>Die Bombe explodiert doch hier schon beim Anlegen des Objekte und nicht erst beim kopieren???</p>
<p>Ich bin verwirrt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260686</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 Oct 2012 12:55:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 14:34:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Genau was ich sagte..</p>
</blockquote>
<p>Nope. Du sagtest &quot;die werden nicht automatisch generiert&quot;. Werden sie aber doch, wenn alle anderen auch automatisch generiert werden.</p>
</blockquote>
<p>Ich tu jetzt einfach mal so, als ob cooky das richtige meinte.</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>_sone_dreck schrieb:</p>
<blockquote>
<p>es werden nur ctor, dtor, copy, assignment von alleine angelegt</p>
</blockquote>
<p>In C++11 kommen noch move-Ctor und move-Assignment dazu...</p>
</blockquote>
<p>Noch nicht ganz wach? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Die werden <strong>so</strong> nicht automatisch generiert.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2260727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260727</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 15 Oct 2012 14:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 14:52:58 GMT]]></title><description><![CDATA[<p>Butterbrot schrieb:</p>
<blockquote>
<p>Da nimmt man ja auch std::unique_ptr wenn p1 ein Objekt hält, ansonsten eben gleich ein Int anstelle eines Pointers auf int nutzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Oder liege ich da so falsch?</p>
</blockquote>
<p>Ich habe die int* jetzt als <em>Beispiel</em> genommen, einfach um aufzuzeigen, dass es darum geht, dass evtl voneinander abhängige Objekte nur zum Teil kopiert werden, bevor die Exception zuschlägt. Meinetwegen nimm zwei ints a und b, die als Invariante haben, dass a+b=100 oder etwas in der Art (ja ich weiß, da gibts auch wieder ein &quot;aber&quot;...)</p>
<p>Butterbrot schrieb:</p>
<blockquote>
<p>Die Bombe explodiert doch hier schon beim Anlegen des Objekte und nicht erst beim kopieren???</p>
</blockquote>
<p>Assignment ist der Zuweisungsoperator. Es ist nicht der Copy-Ctor gemeint. Gehe davon aus, dass beide Objekte voneinander unabhängig erstellt wurden (Ctor wirft keine Exception) und irgendwann danach das eine dem anderen zugewiesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260737</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 14:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 15:00:34 GMT]]></title><description><![CDATA[<p>Was passiert eigentlich wenn a und b ein Objekt mit Resourcen ist und ich die Zuweisung a = b mache? Dann habe ich zwei mal die gleiche Resource in zwei verschiedenen Objekten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260741</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 Oct 2012 15:00:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign: Verbietet ihr alles was ihr nicht braucht? on Mon, 15 Oct 2012 15:23:19 GMT]]></title><description><![CDATA[<p>Butterbrot schrieb:</p>
<blockquote>
<p>Was passiert eigentlich wenn a und b ein Objekt mit Resourcen ist und ich die Zuweisung a = b mache? Dann habe ich zwei mal die gleiche Resource in zwei verschiedenen Objekten?</p>
</blockquote>
<p>Wenn du die Big5, besonders den op= nicht ordentlich implementierst, ja. Und im Normalfall kommst du in Teufels Küche, wenn das erste Objekt zerstört wurde und das zweite Objekt sie versucht weiter zu nutzen. Spätestens aber wenn das zweite Objekt zerstört wird und der Dtor die gleiche Ressource das zweite mal freigeben will...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260751</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 15:23:19 GMT</pubDate></item></channel></rss>