<?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[Verständnisfrage zur Objekterstellung]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine simple Frage zur Erstellung von Objekten. Und zwar sagen alle Bücher, dass man es so macht:</p>
<pre><code>[cpp]
Klasse1 bla;
[/cpp]
</code></pre>
<p>bzw:</p>
<pre><code>[cpp]
Klasse1 *blah = new Klasse1;
[/cpp]
</code></pre>
<p>Jetzt habe ich herausgefunden, dass auch soetwas funktioniert:</p>
<pre><code>[cpp]
Klasse1 *blah = 0;
[/cpp]
</code></pre>
<p>Meine Frage ist jetzt, was genau ist der Unterschied zwischen den beiden Pointer-Varianten und was sind die Vor- und Nachteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282283/verständnisfrage-zur-objekterstellung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 07:17:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282283.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Feb 2011 11:26:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage zur Objekterstellung on Thu, 17 Feb 2011 11:27:19 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine simple Frage zur Erstellung von Objekten. Und zwar sagen alle Bücher, dass man es so macht:</p>
<pre><code>[cpp]
Klasse1 bla;
[/cpp]
</code></pre>
<p>bzw:</p>
<pre><code>[cpp]
Klasse1 *blah = new Klasse1;
[/cpp]
</code></pre>
<p>Jetzt habe ich herausgefunden, dass auch soetwas funktioniert:</p>
<pre><code>[cpp]
Klasse1 *blah = 0;
[/cpp]
</code></pre>
<p>Meine Frage ist jetzt, was genau ist der Unterschied zwischen den beiden Pointer-Varianten und was sind die Vor- und Nachteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022199</guid><dc:creator><![CDATA[Keksschleuder]]></dc:creator><pubDate>Thu, 17 Feb 2011 11:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zur Objekterstellung on Thu, 17 Feb 2011 11:31:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Klasse bla; // bla ist ein Objekt vom Typ Klasse auf dem Stack<br />
Klasse* bla = new Klasse; // bla ist ein Zeiger auf ein Objekt vom Typ Klasse,<br />
// new Klasse erstellte ein Objekt vom Typ Klasse auf dem Heap<br />
// bla wird die Adresse vom diesem Objekt zugewiesen<br />
Klasse* bla = 0; // bla ist ein Zeiger, der auf kein Objekt zeigt.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2022200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022200</guid><dc:creator><![CDATA[hm]]></dc:creator><pubDate>Thu, 17 Feb 2011 11:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zur Objekterstellung on Thu, 17 Feb 2011 11:31:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Meine Frage ist jetzt, was genau ist der Unterschied zwischen den beiden Pointer-Varianten und was sind die Vor- und Nachteile?</p>
</blockquote>
<p>Bei der ersten Version wird ein Objekt auf dem Heap erstellt und dessen Adresse in im Zeiger gespeichert. Bei der zweiten Version wird kein Objekt auf dem Heap erstellt und der Nullzeiger wird gespeichert, mit dem du erstmal nichts anfangen kannst.</p>
<p>Vor- und Nachteile gibt es demnach nicht, weil die Semantik (die Bedeutung) vollkommen unterschiedlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022201</guid><dc:creator><![CDATA[hiep]]></dc:creator><pubDate>Thu, 17 Feb 2011 11:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zur Objekterstellung on Thu, 17 Feb 2011 11:42:32 GMT]]></title><description><![CDATA[<p>Morgen</p>
<pre><code class="language-cpp">Klasse1 *blah = new Klasse1; // Pointer, der auf ein gültiges Objekt zeigt.

Klasse1 *blah = 0; // Nullpointer --&gt; Pointer der auf nichts zeigt...
Klasse1 *blah = NULL; // ...das kannst du auch so schreiben.

Klasse1 *blah; // uninitialisierter Pointer, der irgendwo hinzeigt, also auf etwas Ungültiges zeigt.
</code></pre>
<p>Wenn du nocht nicht weißt, auf was dein Pointer mal zeigen soll, dann solltest/musst du ihn unbedingt mit 0 initialisieren, und nicht uninitialisiert lassen, weil dann kannst du ungültige Schreibzugriffe vermeiden, indem du auf 0 testest, und somit weißt, dass der Pointer noch auf nichts Gültiges verweist.</p>
<pre><code class="language-cpp">int* pointer = 0;

if(pointer == 0)
{
    // darf nicht mit dem Pointer arbeiten, da er auf nichts Gültiges verweist.
}
else
{
    // darf mit dem Pointer arbeiten, da er auf ein gültiges Objekt verweist.
}
</code></pre>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022203</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Feb 2011 11:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zur Objekterstellung on Thu, 17 Feb 2011 12:55:43 GMT]]></title><description><![CDATA[<p>Wenn vor jeder Operation die Gültigkeit geprüft werden muss, ist das ein tendenzieller Hinweis auf schlechtes Design (gibt natürlich einige sinnvolle Fälle). Man sollte versuchen, Gültigkeit wo möglich als Invariante vorauszusetzen und Variablen möglichst früh sinnvoll zu initialisieren. Siehe auch <a href="http://www.c-plusplus.net/forum/p1995590#1995590" rel="nofollow">hier</a>.</p>
<p>Abgesehen davon sind Schreibzugriffe auf uninitialisierte Zeiger sehr wohl erlaubt, aber eben nicht auf das Objekt dahinter (an das man durch Dereferenzierung gelangt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2022244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2022244</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 17 Feb 2011 12:55:43 GMT</pubDate></item></channel></rss>