<?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[Returntyp dynamisch ändern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei, das Buch &quot;Modernes C++ Design&quot; zu lesen und bin auf manche sehr interessante Dinge gestoßen. Zum Beispiel auf den Typ-Selector:</p>
<pre><code class="language-cpp">template &lt;bool flag, typename T, typename U&gt;
struct Select {
    typedef T Result;
};

template &lt;typename T, typename U&gt;
struct Select&lt;false, T, U&gt; {
    typedef U Result;
};
</code></pre>
<p>Ich hoffe mal, er versteht sich von selbst.<br />
In meinem Code gibt es jede Menge Funktionen, die je nach Erfolg einen <code>bool</code> mit bzw. <code>true</code> oder <code>false</code> zurückgeben. Macht es in diesem Beispiel Sinn, den Returntyp der Methode machWas in ein</p>
<pre><code class="language-cpp">typename Select&lt;CheckingPolicy::Checked, bool, void&gt;::Result
</code></pre>
<p>umzuschreiben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct Check {
    enum { Checked = true };

    bool valid(void* ptr) const
    { return ptr; }
};

struct NoCheck {
    enum { Checked = false };

    bool valid(void*) const
    { return true; }
};

template &lt;class CheckingPolicy&gt;
class Foo : public CheckingPolicy {
public:

    bool machWas(void* ptr) {
        if (!CheckingPolicy::valid(ptr))
            return false;
        return true;
    }
};

Foo&lt;Check&gt; f;
void* ptr = &amp;f;

// -------------------------------------------
int main () {
    std::cout &lt;&lt; f.machWas(NULL /* oder ptr zum Testen */) &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Wenn Foo nicht gecheckt werden soll, muss auch kein <code>bool</code> zurückgegeben werden. Beschleunigt das oder ist das alles nur überflüssig/behindernd?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288441/returntyp-dynamisch-ändern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 23:00:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288441.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Jun 2011 19:01:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:01:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei, das Buch &quot;Modernes C++ Design&quot; zu lesen und bin auf manche sehr interessante Dinge gestoßen. Zum Beispiel auf den Typ-Selector:</p>
<pre><code class="language-cpp">template &lt;bool flag, typename T, typename U&gt;
struct Select {
    typedef T Result;
};

template &lt;typename T, typename U&gt;
struct Select&lt;false, T, U&gt; {
    typedef U Result;
};
</code></pre>
<p>Ich hoffe mal, er versteht sich von selbst.<br />
In meinem Code gibt es jede Menge Funktionen, die je nach Erfolg einen <code>bool</code> mit bzw. <code>true</code> oder <code>false</code> zurückgeben. Macht es in diesem Beispiel Sinn, den Returntyp der Methode machWas in ein</p>
<pre><code class="language-cpp">typename Select&lt;CheckingPolicy::Checked, bool, void&gt;::Result
</code></pre>
<p>umzuschreiben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct Check {
    enum { Checked = true };

    bool valid(void* ptr) const
    { return ptr; }
};

struct NoCheck {
    enum { Checked = false };

    bool valid(void*) const
    { return true; }
};

template &lt;class CheckingPolicy&gt;
class Foo : public CheckingPolicy {
public:

    bool machWas(void* ptr) {
        if (!CheckingPolicy::valid(ptr))
            return false;
        return true;
    }
};

Foo&lt;Check&gt; f;
void* ptr = &amp;f;

// -------------------------------------------
int main () {
    std::cout &lt;&lt; f.machWas(NULL /* oder ptr zum Testen */) &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Wenn Foo nicht gecheckt werden soll, muss auch kein <code>bool</code> zurückgegeben werden. Beschleunigt das oder ist das alles nur überflüssig/behindernd?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079406</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:08:31 GMT]]></title><description><![CDATA[<p>Ich hätte jetzt wahrscheinlich <code>assert(ptr)</code> geschrieben, aber man kanns auch so wie du machen <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="🤡"
    /></p>
<p>Bei <em>Modern C++ Design</em> musst du manchmal aufpassen: Es gibt sehr viele interessante Dinge, aber vieles ist nicht für den 1:1 Praxisgebrauch geeignet. Zu viele Policies machen Code unnötig komplex, zudem kann man nicht immer alles als Template schreiben. Manchmal sind auch dynamisch-polymorphe Strategien sinnvoller als statische Policies.</p>
<p>Das nur als genereller Hinweis, was soll <code>machWas()</code> denn tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079413</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:09:07 GMT]]></title><description><![CDATA[<p>Bei deinem Beispiel sehe ich nicht, wo man dort die Rückgabe weglassen könnte - du verwendest schließlich den Rückgabewert von machwas() im Hauptprogramm.</p>
<p>Ansonsten dürfte die Funktion sich auch weiter ändern als du das mit Templates umsetzen kannst, wenn du den Rückgabetyp zu void umbiegen solltest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079414</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:29:21 GMT]]></title><description><![CDATA[<p>Danke für die schnellen Antworten :).</p>
<p>Mir ging es nicht darum, ob die Klasse sinnvoll ist und ob sie sinnvolle Methoden hat.</p>
<p>Generell gilt ja:<br />
Wenn man die Checks, z.B. wenn es um Pointer geht, weglässt, dann erhöht sich doch normalerweise die Geschwindigkeit. Angenommen, Foo wäre eine SmartPointer-Klasse, bei der man durch Policies wählen kann, ob der Pointer bei einer Zuweisung geprüft wird oder nicht. Bei einem Programmabschnitt, indem massehaft SmartPointer erstellt und zugewiesen werden, macht es Sinn, die SmartPointer nicht prüfen zu lassen, da man mit einer großen Zunahme an Ausführungsgeschwindigkeit rechnen kann. Die Zuweisungsmethode gibt einen bool zurück, der den Erfolg der Ausführung verrät. Wenn ich jetzt aber einen NotChecked-SmartPointer habe, macht es keinen Sinn, wenn die Zuweisungsmethode trotzdem noch einen bool zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079435</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:41:50 GMT]]></title><description><![CDATA[<p>Sorry für Doppelpost, aber als Unregistrierter kann man ja seine Posts nicht bearbeiten.</p>
<p>Nochmal zu CStoll:<br />
Ich würde aber keinen ungeprüften SmartPtr anlegen und dann wissen wollen, ob die Zuweisung ohne Probleme verlief.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079442</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Thu, 16 Jun 2011 19:43:14 GMT]]></title><description><![CDATA[<p>Wenn es nur um Geschwindigkeit geht – d.h. eine Prüfung wäre immer sinnvoll, aber manchmal zu langsam – würde ich wirklich <code>assert()</code> nehmen. Policies stehen nur zur Diskussion, wenn die Programmsemantik betroffen ist.</p>
<p>Und <code>Loki::SmartPtr</code> ist mit seinen fünf Policies massiv overengineered, trotzdem kann man die Klasse für einfache Spezialfälle nicht gebrauchen (Beispiel siehe <a href="http://www.c-plusplus.net/forum/267432" rel="nofollow">hier</a>). Ich habe mir für die Fälle, in denen <code>std::unique_ptr</code> und <code>std::shared_ptr</code> nicht geeignet sind, eigene Smart-Pointer geschrieben. Das betrifft vor allem Implementierungen mit Deep-Copy-Semantik.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079443</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Jun 2011 19:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 20:57:42 GMT]]></title><description><![CDATA[<p>Einige meiner Klassen benutzen OpenGL. Das Checken lässt sich also nicht durch ein einfaches assert() erledigen, sondern der untersuchte Wert muss mit z.B. glGetIntegerv ermittelt werden. Ein assert macht hier vermutlich keinen Sinn, da wahrscheinlich der Aufruf von glGetIntegerv am meisten Zeit braucht. Hier macht es doch Sinn, durch ein Policy festzulegen, ob gecheckt werden soll oder nicht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079943</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Fri, 17 Jun 2011 20:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 21:09:34 GMT]]></title><description><![CDATA[<p>Wieso sollte das ein Problem mit dem assert sein? Im Debug-Modus spielt die Zeit keine Rolle (und da du sowieso checken willst, ist dein Aufruf auch notwendig), im Release wird der assert()-Aufruf sowieso vom Präprozessor wegoptimiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079945</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 17 Jun 2011 21:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 21:29:35 GMT]]></title><description><![CDATA[<p>Das ist mir klar.<br />
Wer sagt denn, ob ich Checken will? glGetIntegerv kann nicht wegoptimiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079948</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Fri, 17 Jun 2011 21:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 21:35:04 GMT]]></title><description><![CDATA[<p>allestester schrieb:</p>
<blockquote>
<p>Das ist mir klar.<br />
Wer sagt denn, ob ich Checken will? glGetIntegerv kann nicht wegoptimiert werden.</p>
</blockquote>
<p>Klar, die Funktion kannst du nicht optimieren - aber im ungecheckten Ablauf mußt du sie auch nicht aufrufen, wenn du sie nicht benötigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079950</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 17 Jun 2011 21:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 21:37:55 GMT]]></title><description><![CDATA[<p>Also macht es dann an der Stelle Sinn, ein CheckingPolicy zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079951</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Fri, 17 Jun 2011 21:37:55 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 22:28:21 GMT]]></title><description><![CDATA[<p>allestester schrieb:</p>
<blockquote>
<p>Also macht es dann an der Stelle Sinn, ein CheckingPolicy zu verwenden.</p>
</blockquote>
<p>Wenn es nur darum geht, Programmierfehler zu finden, nein. Ich sehe dein Problem wirklich nicht. Es ist ganz einfach:</p>
<ul>
<li>Für zeitintensive Überprüfungen zu Debugging-Zwecken, die keinen Einfluss auf die Semantik des Programms haben, nimmst du <code>assert</code> . Im Release-Modus sind alle Assertions ausgeschaltet, du hast also keinen Overhead.</li>
<li>Sonst... nimmst du nicht <code>assert</code> <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="🤡"
    /></li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2079961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079961</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jun 2011 22:28:21 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 22:38:26 GMT]]></title><description><![CDATA[<p>OpenGL Errors können auch außerhalb des Debuggings auftreten. Code, der bei mir auf dem PC läuft, muss nicht auf meinem Lappi laufen. Allein schon wegen der verschiedenen Hardware.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079967</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Fri, 17 Jun 2011 22:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 22:52:30 GMT]]></title><description><![CDATA[<p>Okay, Laufzeitfehler sind wieder ein anderes Thema als Programmierfehler. Dann kann so eine Policy Sinn machen, aber ich würds damit nicht übertreiben. Denk dran, dass du jede Policy in den Typen eingravierst und dadurch leicht verschiedene, inkompatible Template-Instanziierungen erzeugst. Wenn es nur darum geht, eine Zuweisung zu überprüfen, kannst du auch eine Funktion</p>
<pre><code class="language-cpp">bool CheckedAssign(SmartPtr&amp; dest, const SmartPtr&amp; source);
</code></pre>
<p>schreiben.</p>
<p>P.S. Noch was:</p>
<p>allestester schrieb:</p>
<blockquote>
<p>Die Zuweisungsmethode gibt einen bool zurück, der den Erfolg der Ausführung verrät. Wenn ich jetzt aber einen NotChecked-SmartPointer habe, macht es keinen Sinn, wenn die Zuweisungsmethode trotzdem noch einen bool zurückgibt.</p>
</blockquote>
<p>Meinst du damit den <code>SmartPtr::operator=</code> ? Der sollte nicht <code>bool</code> , sondern <code>SmartPtr&amp;</code> zurückgeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079969</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jun 2011 22:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 22:57:50 GMT]]></title><description><![CDATA[<p>allestester schrieb:</p>
<blockquote>
<p>Einige meiner Klassen benutzen OpenGL. Das Checken lässt sich also nicht durch ein einfaches assert() erledigen, sondern der untersuchte Wert muss mit z.B. glGetIntegerv ermittelt werden.</p>
</blockquote>
<p>Ich werf mal das Stichwort Exceptions in den Raum...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079972</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 17 Jun 2011 22:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 23:11:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Okay, dann werde ich mir mal genauer überlegen, wo ich asserts anstatt Policies verwende. Vergiss mein Beispiel, das war mehr als schlecht <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a>:<br />
Ich benutze nicht gerne Exceptions. Ich finde sie zu unhandlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079975</guid><dc:creator><![CDATA[allestester#]]></dc:creator><pubDate>Fri, 17 Jun 2011 23:11:20 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 23:17:32 GMT]]></title><description><![CDATA[<p>Der grosse Vorteil von Exceptions besteht darin, dass du den Anwendercode frei von Fehlerbehandlung halten kannst. Du musst nicht jede Anweisung einzeln auf ihren Erfolg prüfen, ausserdem brauchst du den Status nicht umständlich über mehrere Funktionen hinweg hochzureichen.</p>
<p>Schau dir vielleicht den <a href="http://magazin.c-plusplus.net/artikel/Modernes%20Exception-Handling%20Teil%201%20-%20Die%20Grundlagen" rel="nofollow">Artikel</a> zu modernem Exceptionhandling an, er erklärt die Thematik wirklich gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079976</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jun 2011 23:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 23:22:47 GMT]]></title><description><![CDATA[<p>allestester# schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a>:<br />
Ich benutze nicht gerne Exceptions. Ich finde sie zu unhandlich.</p>
</blockquote>
<p>Sry, aber daraus kann man eigentlich nur schließen dass du sie nicht verstanden hast <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>Siehe was Nexus sagt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079977</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 17 Jun 2011 23:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Fri, 17 Jun 2011 23:27:16 GMT]]></title><description><![CDATA[<p>Ich hab noch kein ganzes Buch über Exception-Handling gelesen, nur ein Kapitel eines Buches. Vielleicht sollte ich mich damit mal ein bisschen beschäftigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079979</guid><dc:creator><![CDATA[allestester]]></dc:creator><pubDate>Fri, 17 Jun 2011 23:27:16 GMT</pubDate></item><item><title><![CDATA[Reply to Returntyp dynamisch ändern on Sat, 18 Jun 2011 00:12:26 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>P.S. Noch was:</p>
<p>allestester schrieb:</p>
<blockquote>
<p>Die Zuweisungsmethode gibt einen bool zurück, der den Erfolg der Ausführung verrät. Wenn ich jetzt aber einen NotChecked-SmartPointer habe, macht es keinen Sinn, wenn die Zuweisungsmethode trotzdem noch einen bool zurückgibt.</p>
</blockquote>
<p>Meinst du damit den <code>SmartPtr::operator=</code> ? Der sollte nicht <code>bool</code> , sondern <code>SmartPtr&amp;</code> zurückgeben...</p>
</blockquote>
<p>Falls das schon erklärt wurde sorry, aber: was für ein Smart-Pointer ist das denn, dass der Zuweisungsoperator fehlschlagen kann? <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>
<p>Selbst wenn es z.B. um eine Never-Null Garantie geht, kann der Zuweisungsoperator nicht fehlschlagen, sofern<br />
a) man im Konstruktor überprüft ob ein Nullpointer übergeben wurde, und falls ja, brav abort()ed oder eine Exception wirft und<br />
b) der Zuweisungsoperator nicht mit rohen Zeigern funktioniert</p>
<p>Dinge die (auf Grund von Laufzeitfehlern) fehlschlagen können, haben IMO in einem Smart-Pointer nix verloren. Und Dinge die nur auf Grund von Programmierfehlern fehlschlagen können, würde ich mit assert() oder abort() behandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079984</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 18 Jun 2011 00:12:26 GMT</pubDate></item></channel></rss>