<?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[Speicherreservierung mit new]]></title><description><![CDATA[<p>Hallo</p>
<p>Garantiert mir der C++-Standard, dass ein Zeiger der auf ein mit <code>new</code> reserviertes Objekt immer ungleich <code>NULL</code> ist?</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283066/speicherreservierung-mit-new</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 20:50:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283066.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Mar 2011 11:36:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 11:36:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Garantiert mir der C++-Standard, dass ein Zeiger der auf ein mit <code>new</code> reserviertes Objekt immer ungleich <code>NULL</code> ist?</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029612</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Fri, 04 Mar 2011 11:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 11:38:14 GMT]]></title><description><![CDATA[<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029614</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 04 Mar 2011 11:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 14:20:17 GMT]]></title><description><![CDATA[<p><s>Nein.</s></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class MyOb {
public:
  int i;
  MyOb() : i (200) {}
};

int main()
{
    MyOb * meins = new MyOb;

    #define NULL meins // dont do this, its UB :(

    std::cout &lt;&lt; NULL;

}
</code></pre>
<p><s>Deswegen: [c]0[/c] statt [c]NULL[/c]. Zugegebenermassen etwas konstruiert <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="😉"
    /> aber es garantiert dir keiner das [c]NULL == 0[/c], also kann da auch was anderes drinstehen, und wenn das nun zufällig genau das ist was das [c]new[/c] als Adresse erzeugt, PECH.</s></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029641</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 04 Mar 2011 14:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:33:10 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>[...] aber es garantiert dir keiner das <code>NULL == 0</code> , also kann da auch was anderes drinstehen, und wenn das nun zufällig genau das ist was das <code>new</code> als Adresse erzeugt, PECH.</p>
</blockquote>
<p>Doch, der Standard garantiert Dir das. Was Du da tust ist produziert UB und ist daher eh nicht relevant für die Frage.</p>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Garantiert mir der C++-Standard, dass ein Zeiger der auf ein mit <code>new</code> reserviertes Objekt immer ungleich <code>NULL</code> ist?</p>
<p>MfG, EOutOfResources</p>
</blockquote>
<p>Wenn Dein Name Programm wird, dann kann es, je nach Konfiguration der <code>new</code> -Fehlerbahandlung sein, dass <code>new</code> 0 zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029686</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:33:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:34:24 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Deswegen: <code>0</code> statt <code>NULL</code> .</p>
</blockquote>
<p>Man muss immer Pimpl einsetzen und die Body-Klasse in der .cpp-Datei verstecken. Sonst könnte jemand <code>#define private public</code> schreiben und die Kapselung aufheben.</p>
<p>So läuft das in C++ nicht. <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/2029690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029690</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:38:52 GMT]]></title><description><![CDATA[<p>Mist <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="😉"
    /> gibts irgendwo eingentlich eine Liste von UB? Wo schau ich sowas nach?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029693</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:39:38 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Nein.</p>
<pre><code class="language-cpp">#define NULL meins
</code></pre>
</blockquote>
<p>Ob das erlaubt ist?<br />
Aber mach doch</p>
<pre><code class="language-cpp">#define new new(badHint)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2029694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029694</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:57:53 GMT]]></title><description><![CDATA[<p>Thou shalt not redefine reserved identifiers!</p>
<p>NULL, new, private, usw. zählen alle dazu.</p>
<p>padreigh schrieb:</p>
<blockquote>
<p>Mist <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="😉"
    /> gibts irgendwo eingentlich eine Liste von UB? Wo schau ich sowas nach?</p>
</blockquote>
<p>Den Standard nach &quot;undefined&quot; durchsuchen? Das lohnt aber den Aufwand nicht, gesunder Menschenverstand und Erfahrung sollten für die meisten Fälle reichen und ansonsten guckt man eben gezielt im Standard. Hier Kapitel 2.10 &quot;Identifiers&quot; wo man schon private und new findet und von dort wird man weiterverwiesen nach 17.4.3.1 &quot;Reserved names&quot; wo dann indirekt NULL ausgeschlossen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029700</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 13:57:41 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Mist <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="😉"
    /> gibts irgendwo eingentlich eine Liste von UB? Wo schau ich sowas nach?</p>
</blockquote>
<p>Im <a href="http://www.open-std.org/jtc1/sc22/wg21/" rel="nofollow">C++ Standard</a>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029702</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 13:57:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 14:16:10 GMT]]></title><description><![CDATA[<p>Ich komm zwar in dem pdf das ich fand (Dank für den Link) (N3225 10-0215 Working Draft, Standard for Programming Language C++ Pete Becker 2010-11-27 2010-11 N3126=10-0116=) leicht andere Kapitelnummern aber sieht so aus als wär das tatsächlich verboten. Snüff. Wie bekomm ich denn heraus welche Doku &quot;meinem&quot; C++ entspricht? (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029713</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 04 Mar 2011 14:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 14:20:47 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Wie bekomm ich denn heraus welche Doku &quot;meinem&quot; C++ entspricht? (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5))</p>
</blockquote>
<p>Der Sinn eines Standards ist ja gerade, dass es nicht verschiedene Versionen gibt <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>Die meisten Compiler haben zwar gewisse Erweiterungen, aber um portabel programmieren zu können, solltest du dich soweit möglich an den C++-Standard halten. Abweichungen findest du in der Dokumentation deines Compilers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029715</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Mar 2011 14:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 14:25:07 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Wie bekomm ich denn heraus welche Doku &quot;meinem&quot; C++ entspricht? (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5))</p>
</blockquote>
<p>Das ist der C++ Standard (und eben das aktuelle Working Draft für den Neuen und nicht der momentan gültige Standard, darum die etwas anderen Nummern) und keine Doku...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029717</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 14:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:00:07 GMT]]></title><description><![CDATA[<p>Hab ich die Frage falsch verstanden? Hier steht doch ganz klar, dass die Rückgabe von new NULL ist, wenn kein Speicher mehr vorhanden ist und die nothrow-Variante vom Operator new genommen wird:</p>
<p><a href="http://www.cplusplus.com/reference/std/new/operator%20new/" rel="nofollow">http://www.cplusplus.com/reference/std/new/operator%20new/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029736</guid><dc:creator><![CDATA[VielleichtFalschversteher]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:01:52 GMT]]></title><description><![CDATA[<p>VielleichtFalschversteher schrieb:</p>
<blockquote>
<p>Hab ich die Frage falsch verstanden? Hier steht doch ganz klar, dass die Rückgabe von new NULL ist, wenn kein Speicher mehr vorhanden ist und die nothrow-Variante vom Operator new genommen wird:</p>
<p><a href="http://www.cplusplus.com/reference/std/new/operator%20new/" rel="nofollow">http://www.cplusplus.com/reference/std/new/operator%20new/</a></p>
</blockquote>
<p>Von nowthrow war hier nie die Rede, es geht um das Verhalten von new. Und da garantiert der Standard, dass man den Speicher bekommt oder eine bad_alloc exception geworfen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029739</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:05:44 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Von nowthrow war hier nie die Rede, es geht um das Verhalten von new. Und da garantiert der Standard, dass man den Speicher bekommt oder eine bad_alloc exception geworfen wird.</p>
</blockquote>
<p>Es war die Rede vom operator new und der beinhaltet unter anderem die nothrow-Variante. Deswegen kann man doch nicht allgemein sagen, dass der Pointer, der mit new initialisiert wird, niemals NULL ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029743</guid><dc:creator><![CDATA[VielleichtFalschversteher]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:34:25 GMT]]></title><description><![CDATA[<p>Nein, die Frage war</p>
<blockquote>
<p>Garantiert mir der C++-Standard, dass ein Zeiger der auf ein mit new reserviertes Objekt [zeigt] immer ungleich NULL ist?</p>
</blockquote>
<p>Die Reservierung ist aber nicht erfolgt, wenn new wirft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029760</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:38:55 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Die Reservierung ist aber nicht erfolgt, wenn new wirft.</p>
</blockquote>
<p>Genau! Wenn geworfen wird, will ich überhaupt nicht auf Gleichheit mit <code>NULL</code> prüfen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029767</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:45:54 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Garantiert mir der C++-Standard, dass ein Zeiger der auf ein mit <code>new</code> reserviertes Objekt immer ungleich <code>NULL</code> ist?</p>
<p>MfG, EOutOfResources</p>
</blockquote>
<p>NULL ist nach Konvertierung in einen beliebigen Zeigertyp ein Nullzeiger. Ein Nullzeiger zeigt definitionsgemäß niemals auf irgendein Objekt (ob nun per new oder irgendwie anders erzeugt).<br />
Im Umkehrschluss folgt, dass wenn new erfolgreich war und ein Objekt erzeugt hat, das Resultat kein Nullzeiger sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029771</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 15:47:30 GMT]]></title><description><![CDATA[<p>Long story short: new wirft eine std::bad_alloc exception wenn das allokieren fehlschlägt. Außer es handelt sich um die nothrow Variante oder es kommt sonstwie ein komisch überladener operator new() ins Spiel. Wenn new wirft brauchst du nichts auf 0 zu prüfen denn soweit kommst du dann sowieso gar nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029774</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 15:47:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 21:46:36 GMT]]></title><description><![CDATA[<p>c++ Standard hin oder her, was ist eigentlich mit denen, die ihren Code mit deaktivierten Exceptions bauen müssen - das kenne ich von einigen Projekten für eingebettete Systeme, das erste, was ausgeschaltet wird, ist Exception-Handling. Was macht new in diesem Fall, was garantiert der Standard <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2029947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029947</guid><dc:creator><![CDATA[abc.w]]></dc:creator><pubDate>Fri, 04 Mar 2011 21:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 21:51:18 GMT]]></title><description><![CDATA[<p>abc.w schrieb:</p>
<blockquote>
<p>Was macht new in diesem Fall, was garantiert der Standard <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>
</blockquote>
<p>gar nix, &quot;Exception Handling ausschalten&quot; ist im Standard nicht vorgesehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029949</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 21:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 22:02:36 GMT]]></title><description><![CDATA[<p>Na, seht ihr, also doch alle Zeiger schön und brav mit NULL vergleichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029954</guid><dc:creator><![CDATA[abc.w]]></dc:creator><pubDate>Fri, 04 Mar 2011 22:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 22:06:04 GMT]]></title><description><![CDATA[<p>abc.w schrieb:</p>
<blockquote>
<p>Na, seht ihr, also doch alle Zeiger schön und brav mit NULL vergleichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Öhm nein, in Standard C++ mal in der Regel nicht, da wirft new eine exception!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029956</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 22:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 22:07:23 GMT]]></title><description><![CDATA[<p>Na, damit das System nicht abstürzt, damit man darauf reagieren kann, dass plötzlich der Speicher ausgegangen ist, dass etwas total schief läuft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029958</guid><dc:creator><![CDATA[abc.w]]></dc:creator><pubDate>Fri, 04 Mar 2011 22:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 22:09:34 GMT]]></title><description><![CDATA[<p>Dafür verwendet man in der Regel exception handling...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029959</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Mar 2011 22:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung mit new on Fri, 04 Mar 2011 23:38:06 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>padreigh schrieb:</p>
<blockquote>
<p>Deswegen: <code>0</code> statt <code>NULL</code> .</p>
</blockquote>
<p>Man muss immer Pimpl einsetzen und die Body-Klasse in der .cpp-Datei verstecken. Sonst könnte jemand <code>#define private public</code> schreiben und die Kapselung aufheben.</p>
</blockquote>
<p>Ganz klares jain <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Wenn man die Klasse wirklich &quot;verstecken&quot; will muss man PIMPLn (oder mit Factories arbeiten). Zumindest dann wenn &quot;verstecken&quot; bedeutet dass der Programmierer nichtmal <em>sehen</em> soll welche Member so für die Implementierung verwendet werden. Dazu reicht es nämlich das Header-File zu lesen, ganze ohne böse #define Tricks.</p>
<p>Wenn es allerdings um Kapselung geht, dann sollte man <code>private</code> in C++ IMO als ausreichen ansehen (*).<br />
Grund: wenn man eine Klasse im selben Programm (in unterschiedlichen Translation Units) einmal mit public=public und einmal mit public=private übersetzt, dann ist das laut Standard IIRC &quot;undefined behaviour (no diagnostic required)&quot;. Und sobald man anfängt sich auf Tricks zu verlassen die offiziell UB sind, kann man viel machen. Debugger anwerfen, nachsehen wie das worauf der PIMPL-Zeiger zeigt so aussieht, eigene Helper-Structs definieren, reinterpret_cast, fertig.</p>
<p>Ich finde das erwähnenswert, da PIMPL viele Nachteile hat, die man nicht nur deswegen in Kauf nehmen sollte, weil man (fälschlicherweise) denkt damit die Kapselung zu verbessern. Programmieren ist schon genug Arbeit ohne dass man sich das Leben noch unnötigerweise schwer macht <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>----</p>
<p>*: zumindest so lange eine Klasse keine Memberfunction-Templates hat die public oder protected sind. Der einzig mir bekannte standardkonforme Trick um &quot;private&quot; auszuhebeln ist nämlich der, eine Member-Funktion auf einen im eigenen Programm definierten Typ zu spezialisieren.</p>
<p>Ich persönlich meide PIMPL allerdings selbst dann WENN die Klasse public Memberfunction-Templates hat, weil es IMO einfach den Aufwand nicht wert ist. Wenn ein Programmierer rumpfuschen will, dann wird er es so oder so machen. <code>private</code> sagt ganz klar &quot;Finger weg&quot;, und man muss mehr oder weniger fragwürdige Workarounds anwenden um es auszuhebeln. Das ist gut, denn es vermeidet &quot;Unfälle&quot; bzw. Unklarheiten. Alles was darüber hinaus geht, ist IMO in 95% der Fälle unnötig/übertrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029970</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 04 Mar 2011 23:38:06 GMT</pubDate></item></channel></rss>