<?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[Kopien von Objekten verhindern?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Was muss ich alles tun, um zu verhindern das von Objekten durch den Benutzer Kopien angelegt werden können?</p>
<p>Den Kopierkonstruktur leer implementieren und private machen<br />
Den =-operator implementieren (für Objekt* und Objekt&amp;) und private machen</p>
<p>Ist das so richtig? Was fehlt noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251008/kopien-von-objekten-verhindern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 01:21:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251008.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Sep 2009 06:58:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 06:58:05 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Was muss ich alles tun, um zu verhindern das von Objekten durch den Benutzer Kopien angelegt werden können?</p>
<p>Den Kopierkonstruktur leer implementieren und private machen<br />
Den =-operator implementieren (für Objekt* und Objekt&amp;) und private machen</p>
<p>Ist das so richtig? Was fehlt noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785195</guid><dc:creator><![CDATA[Kopiererei]]></dc:creator><pubDate>Mon, 28 Sep 2009 06:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 07:13:52 GMT]]></title><description><![CDATA[<p>In der Boost-Bibliothek gibt es so eine kleine, praktische Klasse namens &quot;noncopyable&quot;. Die sieht in etwa so aus:</p>
<pre><code class="language-cpp">class noncopyable
{
  protected:
    noncopyable() {}
    ~noncopyable() {}
  private:
    noncopyable(noncopyable const&amp;);
    noncopyable const&amp; operator=(noncopyable const&amp;);
};
</code></pre>
<p>Du kannst jetzt Deine Klasse so schreiben:</p>
<pre><code class="language-cpp">class dings : private noncopyable
{
  ...
};
</code></pre>
<p>Der Compiler kann dann keinen Copy-Ctor und keinen Zuweisungsoperator mehr automatisch für dings generieren, weil Copy-Ctor und Zuweisungsoperator der Oberklasse privat sind.</p>
<p>siehe <a href="http://www.boost.org/doc/libs/1_39_0/boost/noncopyable.hpp" rel="nofollow">noncopyable.hpp</a> und <a href="http://www.boost.org/doc/libs/1_40_0/libs/utility/utility.htm" rel="nofollow">utility.hpp</a></p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785200</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 28 Sep 2009 07:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 07:19:16 GMT]]></title><description><![CDATA[<p>Um warum ihn nicht einfach privat machen?! Wozu ableiten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785203</guid><dc:creator><![CDATA[Fragensteller2]]></dc:creator><pubDate>Mon, 28 Sep 2009 07:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 07:25:18 GMT]]></title><description><![CDATA[<p>1. Tipparbeit sparen<br />
2. Es drückt auf einen Blick aus was die Idee ist (nämlich das Kopieren zu verhindern)</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785205</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 28 Sep 2009 07:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 07:37:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class noncopyable 
{ 
  protected: 
    noncopyable() {} 
    ~noncopyable() {}
</code></pre>
<p>Muss ich da dann noch irgendwas mit virtual beachten oder kann man das gefahrlos bei jeder Klasse so anwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785206</guid><dc:creator><![CDATA[Kopiererei]]></dc:creator><pubDate>Mon, 28 Sep 2009 07:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 07:41:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Muss ich da dann noch irgendwas mit virtual beachten oder kann man das gefahrlos bei jeder Klasse so anwenden?</p>
</blockquote>
<p>Das kannst Du gefahrlos anwenden und brauchst nichts virtual zu machen.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785207</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 28 Sep 2009 07:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 08:08:37 GMT]]></title><description><![CDATA[<p>Fragensteller2 schrieb:</p>
<blockquote>
<p>Um warum ihn nicht einfach privat machen?! Wozu ableiten!</p>
</blockquote>
<p>1. ist kürzer<br />
2. ist leserlicher. Man weiß sofort, was gemeint ist<br />
3. Elementfunktionen und Freunde können dann auch keine Kopie anlegen oder den Zuweisungsoperator benutzen.<br />
4. Es tut nicht weh (empty class optimization, es wird kein virtual benötigt)</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785217</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 28 Sep 2009 08:08:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 09:27:18 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Fragensteller2 schrieb:</p>
<blockquote>
<p>Um warum ihn nicht einfach privat machen?! Wozu ableiten!</p>
</blockquote>
<p>4. Es tut nicht weh (empty class optimization, es wird kein virtual benötigt)</p>
<p>Gruß,<br />
SP</p>
</blockquote>
<p>Magst du den Punkt kurz erläutern?</p>
<p>Hab mal nach empty base class optimization gegoogelt, allerdings sind die erklären echt Mist.</p>
<p>Es geht jetzt irgendwie darum, dass man, obwohl man eine zusätzliche Klasse verwendet, von der man erbt, keine Speicherverschwendung hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785243</guid><dc:creator><![CDATA[Kopiererei]]></dc:creator><pubDate>Mon, 28 Sep 2009 09:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 09:39:29 GMT]]></title><description><![CDATA[<p>Kopiererei schrieb:</p>
<blockquote>
<p>Es geht jetzt irgendwie darum, dass man, obwohl man eine zusätzliche Klasse verwendet, von der man erbt, keine Speicherverschwendung hat?</p>
</blockquote>
<p>Ja.<br />
Was willst du jetzt noch erklärt haben? Das sagt doch eh schon alles.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785257</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 28 Sep 2009 09:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 09:43:59 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Kopiererei schrieb:</p>
<blockquote>
<p>Es geht jetzt irgendwie darum, dass man, obwohl man eine zusätzliche Klasse verwendet, von der man erbt, keine Speicherverschwendung hat?</p>
</blockquote>
<p>Ja.<br />
Was willst du jetzt noch erklärt haben? Das sagt doch eh schon alles.</p>
</blockquote>
<p>Das sagt nicht das Interessante, nämlich das warum.</p>
<p>Stellenweise klingen die Antworten hier immer total gereizt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785259</guid><dc:creator><![CDATA[Kopierei]]></dc:creator><pubDate>Mon, 28 Sep 2009 09:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 09:54:35 GMT]]></title><description><![CDATA[<p>Empty Base Optimization heißt das auch, ab und an auch Empty Base Class Optimization. Was die macht ist ja schon klar: eine leere Basisklasse erzeugt keinen Zusätzlichen Speicherverbrauch. Und das Warum: naja. Damit leere Basisklassen keinen zusätzlichen Speicher verbrauchen.<br />
<a href="http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=319" rel="nofollow">Hier</a> gibts eine recht gute Erklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785270</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 28 Sep 2009 09:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien von Objekten verhindern? on Mon, 28 Sep 2009 10:03:26 GMT]]></title><description><![CDATA[<p>Der C++ Standard erlaubt, dass obwohl immer 1 &lt;= sizeof(eine_klasse) gilt, eine &quot;leere Klasse&quot; als Basisklasse keinen zusätzlichen Speicher verbraucht. Diese Optimierung ist auch nicht besonders anspruchsvoll, wird aber auch nicht garantiert. G++ 3.4.5. liefert mir bei folgendem Programm</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A {};
struct B : A { char c; };

int main() {
  std::cout &lt;&lt; sizeof(A) &lt;&lt; '\n';
  std::cout &lt;&lt; sizeof(B) &lt;&lt; '\n';
}
</code></pre>
<p>das Ergebnis</p>
<pre><code>1
1
</code></pre>
<p>Ein kleiner Eintrag dazu (ohne große Erklärungen) gibt's auch in <a href="http://www.research.att.com/~bs/bs_faq2.html#sizeof-empty" rel="nofollow">Stroustrup's FAQ</a>.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785272</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 28 Sep 2009 10:03:26 GMT</pubDate></item></channel></rss>