<?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[SmartPtr und Null pointer checks]]></title><description><![CDATA[<p>Hallo,</p>
<p>momentan bin ich am überlegen, ob sich für nullpointerchecks ev. smartpointer eignen.</p>
<p>Das problem ist eben, was mache ich wenn ich einen NULL pointer habe.(*lach* klingt lustig an der Stelle)</p>
<p>Also in der Form:</p>
<pre><code class="language-cpp">class foo
{
public:
 foo():variable(10){}

  int variable;

}

... und dann ...
foo *bar=0;
SmartPtr&lt;foo &gt; s_ptr(bar)

// L-Value
s_ptr-&gt;variable = 11;
// R_Value
int b=s_ptr-&gt;variable;
</code></pre>
<p>Wenn ich den operator -&gt; überlade um auf 0 zu prüfen, dann fällt mir nichts anderes ein,außer ein Throw wenn ich einen gefunden habe.</p>
<p>Geht das auch ohne ??</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305526/smartptr-und-null-pointer-checks</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 16:38:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305526.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Jul 2012 14:55:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 15:10:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>momentan bin ich am überlegen, ob sich für nullpointerchecks ev. smartpointer eignen.</p>
<p>Das problem ist eben, was mache ich wenn ich einen NULL pointer habe.(*lach* klingt lustig an der Stelle)</p>
<p>Also in der Form:</p>
<pre><code class="language-cpp">class foo
{
public:
 foo():variable(10){}

  int variable;

}

... und dann ...
foo *bar=0;
SmartPtr&lt;foo &gt; s_ptr(bar)

// L-Value
s_ptr-&gt;variable = 11;
// R_Value
int b=s_ptr-&gt;variable;
</code></pre>
<p>Wenn ich den operator -&gt; überlade um auf 0 zu prüfen, dann fällt mir nichts anderes ein,außer ein Throw wenn ich einen gefunden habe.</p>
<p>Geht das auch ohne ??</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228907</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 15:10:29 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>(*lach* klingt lustig an der Stelle)</p>
</blockquote>
<p>Find ich nicht.</p>
<p>Warum schreibst du überhaupt eine eigene smart pointer Klasse? Ich würde da keine Exception schmeißen oder so. Genauso wie mit normalen Zeigern muss der Benutzer auch bei smart pointern prüfen, ob er gültig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228909</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 15:20:47 GMT]]></title><description><![CDATA[<blockquote>
<p>momentan bin ich am überlegen, ob sich für nullpointerchecks ev. smartpointer eignen</p>
</blockquote>
<p>Also bitte beim Thema bleiben. Es geht darum wie man Nullpointer checks mit Smartpointern ohne exceptions programmieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228914</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 15:30:33 GMT]]></title><description><![CDATA[<p>Gar nicht, würde ich sagen. Ein Sonderfall wäre evtl. ein dummy Objekt, das immer alle Methoden von dem richtigen Objekt hat, aber nichts tut. Dann könnte der überladene Operator beim Smart Pointer irgendwie so ausschauen:</p>
<pre><code class="language-cpp">if (obj)
  return obj;
else
  return dummy;
</code></pre>
<p>Sonst würde mir jetzt nichts einfallen. Aber ich denke, null pointer checks sollte man auch nicht verstecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228917</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 15:48:24 GMT]]></title><description><![CDATA[<p>Hmm ja genau, so ein dummy Teil.....<br />
Aber schön ist das auch nicht wirklich....</p>
<p>Wahrscheinlich haste Recht und das läßt sich wirklich nicht so schön mit nem SmartPointer lösen. Werds trotzdem noch etwas weiter versuchen,<br />
ev.find ich ja noch net tolle Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228930</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 16:03:32 GMT]]></title><description><![CDATA[<p>Warum sollte man ein besonderes Verhalten für den Fall definieren, wo <code>operator-&gt;</code> auf einem Nullzeiger angewandt wird? Das ist ein Logikfehler, den sollte man möglichst schnell elimieren und sicher nicht verstecken.</p>
<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Das problem ist eben, was mache ich wenn ich einen NULL pointer habe</p>
</blockquote>
<p>Den Bug fixen. Nullzeiger haben nicht dereferenziert zu werden.</p>
<p>(Übrigens: &quot;fixen&quot; heisst meist nicht, jede Dereferenzierung mit einem <code>if</code> zu &quot;schützen&quot;, sondern gar nicht erst Nullzeiger zu haben. Siehe auch <a href="http://www.c-plusplus.net/forum/p1995590#1995590" rel="nofollow">hier</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228934</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 18:59:38 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Es geht darum wie man Nullpointer checks mit Smartpointern ohne exceptions programmieren kann.</p>
</blockquote>
<p><code>assert</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229029</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 01 Jul 2012 18:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 19:13:24 GMT]]></title><description><![CDATA[<p>Hmm das Problemist, dass unsre Software auch mit Null pointer weiter laufen muss, um fehler zu reporten.</p>
<p>Also Assert kommt für mich nicht in Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229037</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 19:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 19:30:29 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Hmm das Problemist, dass unsre Software auch mit Null pointer weiter laufen muss, um fehler zu reporten.</p>
</blockquote>
<p>Dann mach das doch einfach.</p>
<pre><code class="language-cpp">if (ptr)
{
	ptr-&gt;machen();
}
else
{
	//Fehlerbehandlung
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2229040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229040</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 01 Jul 2012 19:30:29 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 19:59:59 GMT]]></title><description><![CDATA[<p>Das problem ist finde ich,<br />
dass eine Funktion</p>
<pre><code class="language-cpp">void set_a(int error)
{
if(ptr)
ptr-&gt;mache_einen_Teil_von_a();
else
//Melde fehler
}
</code></pre>
<p>viel Wissen hat.<br />
Mir wäre es lieber wenn die Funktion set_a auch nur das macht was sie soll,<br />
und sich nicht auch noch um Pointer kümmern muss.<br />
Das ist nicht ihre Aufgabe.</p>
<p>Also würde ich mich dafür entschließen, die Pointerchecks mit einer Funktion zu prüfen:</p>
<p>z.B.</p>
<pre><code class="language-cpp">check_ptr()
{
 prüfe alle pointer
}

// und dann später
void set_a(int error)
{

ptr-&gt;mache_einen_Teil_von_a();

}
</code></pre>
<p>Ich finde man muss das trennen und man sollte einer Funktion eindeutig eine Aufgabe zuordnen können.</p>
<p>Am schönsten wäre es, wenn sich der Teil des Codes, welcher für die Fehlerbehandlung zuständig ist durch die SmartPointer automatisch mitschreibt,<br />
ohne dass man sich darum kümmern muss...<br />
Dann kann man sich beim programmieren einer Funktion auch auf deren Aufgabe fokusieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229042</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 19:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 20:22:09 GMT]]></title><description><![CDATA[<p>Deshalb darf set_a einfach nie einen Nullzeiger bekommen.</p>
<p>Du versteckst damit nur Programmierfehler. Das kann man zwar machen, aber das macht den Code deshalb nicht robuster - sondern nur schwerer zu debuggen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229050</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 01 Jul 2012 20:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 20:55:36 GMT]]></title><description><![CDATA[<p>Na ja ich finde der Code würde damit übersichtlicher werden.<br />
Dabei sind normalerwiese die Nullpointer nach geraumer Zeit für ein Modul draussen. (Nach meiner erfahrung)</p>
<p>Und ab dem Zeitpunkt glaube ich wirklich dass man sich ev. besser auf die set_a funktion konzentrieren kann.</p>
<p>Vorallem könnet man dem SmartPointer ne Policy mitgeben welche pointer checkt, und eine welche sie wie ein raw pointer verhält.</p>
<p>Wenn dann nach dem Überschreiten eines gewissen Entwicklugsstadiums alle Null pointer draussen sind, könnte man wieder raw Pointer verwenden, und auf die Nullpointer checks generell verzichten.</p>
<p>Oder ne Pollicy mit einer Art CRC vor jedem dereferenzieren gegen bit kipper =)...<br />
(Eine die das Problem nicht schlimmer macht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229059</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 01 Jul 2012 20:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Sun, 01 Jul 2012 21:39:07 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Dabei sind normalerwiese die Nullpointer nach geraumer Zeit für ein Modul draussen. (Nach meiner erfahrung)</p>
</blockquote>
<p>Die vernünftige Lösung für das Problem ist, einfach keine Nullzeiger zu erzeugen.<br />
Mit OOP und ein wenig Hirnschmalz kann man Programme entwickeln, die fast ohne Nullzustände auskommen.<br />
Faustregel: Wenn derselbe Zeiger an mehreren Stellen auf Null geprüft wird, macht man etwas falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229070</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 01 Jul 2012 21:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Mon, 02 Jul 2012 05:53:02 GMT]]></title><description><![CDATA[<p>Ich bin auch für einen Assert. Wenn das Programm bei euch im Debug modus beendet wird, dann findet ihr den Fehler sofort und könnt ihn beheben. Wenn der Kunde im Release modus einen Nullpointer kriegt, dan hilft euch das gar nichts.</p>
<p>Programmeirt einfach so, dass niemals Nullpointer auftreten und behandelt ihr auftreten als schlimmstmöglichen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229096</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 02 Jul 2012 05:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Mon, 02 Jul 2012 06:42:17 GMT]]></title><description><![CDATA[<p>Wieso Nullzeiger nicht sofort dann behandeln wenn sie auftreten?<br />
Also soetwas:</p>
<pre><code class="language-cpp">std::unique_ptr&lt;Widget&gt; widget(createWidget());
if(!widget)
    throw std::runtime_error(&quot;Could not create widget !&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2229105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229105</guid><dc:creator><![CDATA[Ethon_]]></dc:creator><pubDate>Mon, 02 Jul 2012 06:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to SmartPtr und Null pointer checks on Mon, 02 Jul 2012 07:59:35 GMT]]></title><description><![CDATA[<p>Ethon_ schrieb:</p>
<blockquote>
<p>Wieso Nullzeiger nicht sofort dann behandeln wenn sie auftreten?<br />
Also soetwas:</p>
<pre><code class="language-cpp">std::unique_ptr&lt;Widget&gt; widget(createWidget());
if(!widget)
    throw std::runtime_error(&quot;Could not create widget !&quot;);
</code></pre>
</blockquote>
<p>Da steckt die Lösung drin. EIn Smartpointer soll sich weitesgehend verhalten, wie ein normaler Zeiger. Das bedeutet auch, dass der Benutzer eines Smartpointer-Objekts nicht wissen kann, ob dieser auf etwas gültiegs Zeigt. Dementsrechend muss der Benutzer, sofern der Zeiger im Kontext potentiell null sein kann, auch selbst prüfen, ob dieser null ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229130</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 02 Jul 2012 07:59:35 GMT</pubDate></item></channel></rss>