<?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[smart pointer und new]]></title><description><![CDATA[<p>Wenn ich eine Klasse in nem Smartpointer verwalte, so muss ich mich nicht mehr um deren zerstörung kümmern, was ne prima Sache ist, aber was passiert, wenn die Klasse einen char * data; Typ hat?</p>
<p>Den krieg ich ja nur mit new belegt, aber wie lösche ich den dann? Muss ich bevor der pointer mit dem letzten ownership aus dem scope geht, per hand ein delete machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225414/smart-pointer-und-new</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 12:04:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225414.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Oct 2008 07:47:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 07:47:34 GMT]]></title><description><![CDATA[<p>Wenn ich eine Klasse in nem Smartpointer verwalte, so muss ich mich nicht mehr um deren zerstörung kümmern, was ne prima Sache ist, aber was passiert, wenn die Klasse einen char * data; Typ hat?</p>
<p>Den krieg ich ja nur mit new belegt, aber wie lösche ich den dann? Muss ich bevor der pointer mit dem letzten ownership aus dem scope geht, per hand ein delete machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603206</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Thu, 23 Oct 2008 07:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 07:59:55 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Wenn ich eine Klasse in nem Smartpointer verwalte, so muss ich mich nicht mehr um deren zerstörung kümmern, was ne prima Sache ist, aber was passiert, wenn die Klasse einen char * data; Typ hat?</p>
<p>Den krieg ich ja nur mit new belegt, aber wie lösche ich den dann? Muss ich bevor der pointer mit dem letzten ownership aus dem scope geht, per hand ein delete machen?</p>
</blockquote>
<p>Was spricht dagegen, das im Destruktor der Klasse zu tun ?<br />
Und wenn die Klasse vorgegeben ist, kannst Du einen Wrapper drumherum machen, der dann delete[]-ed.<br />
Übrigens: Du darfst nicht vergessen, Dich um &quot;Kopien&quot; zu kümmern (also operator=() und CopyCtor schreiben oder verbieten oder ... (im Endeffekt schreibst Du Dir einen smart_pointer nochmal selbst).</p>
<p>Wenn Du insgesamt allerdings ein Umfeld vorgegebene findest, das Du nicht verändern kannst und in dem &quot;ownership&quot; weitestgehend &quot;gefrickelt&quot; ist, bleibt Dir nicht viel Anderes übrig, als mitzufrickeln.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603211</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 23 Oct 2008 07:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:08:12 GMT]]></title><description><![CDATA[<p>Der struct selbst (erwischt, ist keine Klasse) hat nur einen impliziten destruktor, welcher leer ist, sprich dort wird nichts gelöscht, weil das Ding aus der C Welt stammt.<br />
Der simpelste, mir einfallende Weg ist in der Tat aus dem char * ein std::auto_ptr&lt;char&gt; zu machen, aber da würde ich die Definition ändern, welche automatisch generiert wird.</p>
<p>Die andere Alternative fällt somit wohl auch flach, da von den structs nichts geerbt werden 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=":/"
      alt="😕"
    /></p>
<p>Ein WrapperWrapper wäre wohl ne Lösung, der einen anderen Typen hat, aber selber nen dtor implementiert ... sehe ich das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603216</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:10:07 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Die andere Alternative fällt somit wohl auch flach, da von den structs nichts geerbt werden 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=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Wieso sollte nicht von Structs geerbt werden können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603217</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:14:26 GMT]]></title><description><![CDATA[<p>Verflucht, ich hab das mit einer anderen Sprache verwechselt.<br />
Dann kann ich das ja machen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603221</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:15:00 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Verflucht, ich hab das mit einer anderen Sprache verwechselt</p>
</blockquote>
<p>mit welcher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603225</guid><dc:creator><![CDATA[which one?]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:22:13 GMT]]></title><description><![CDATA[<p>PHP</p>
<p>*scherz*</p>
<p>C#</p>
<blockquote>
<p>A struct cannot inherit from another struct or class, and it cannot be the base of a class. All structs inherit directly from System.ValueType, which inherits from System.Object.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1603236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603236</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:32:56 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Seikilos schrieb:</p>
<blockquote>
<p>Die andere Alternative fällt somit wohl auch flach, da von den structs nichts geerbt werden 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=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Wieso sollte nicht von Structs geerbt werden können?</p>
</blockquote>
<p>Müsste der Dtor des struct nicht virtuell sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603241</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:34:38 GMT]]></title><description><![CDATA[<p>Bulli schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Seikilos schrieb:</p>
<blockquote>
<p>Die andere Alternative fällt somit wohl auch flach, da von den structs nichts geerbt werden 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=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Wieso sollte nicht von Structs geerbt werden können?</p>
</blockquote>
<p>Müsste der Dtor des struct nicht virtuell sein?</p>
</blockquote>
<p>Warum sollte er, wenn sonst nichts virtuell ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603243</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:41:16 GMT]]></title><description><![CDATA[<p>Der ist auch implizit, ich muss dann sicherstellen, dass niemand den neuen Typen in einen Base Container wirft, richtig? Dann würde mangels virtual der spezielle dtor nicht aufgerufen werden.</p>
<p>Wie stelle ich da denn sicher, dass niemand die base instantiiert, wenn ich nicht an den header komme um den dtor pure virtual zu machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603244</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 08:48:00 GMT]]></title><description><![CDATA[<p>Vielleicht schildert Du mal, was Du überhaupt genau treibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603249</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 23 Oct 2008 08:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 11:14:38 GMT]]></title><description><![CDATA[<p>Keine Ahnung um *welche* Smart-Pointer es jetzt geht, aber zumindest bei boost::shared_ptr braucht man keine virtuellen Destruktoren, da man einen &quot;Deleter&quot; angeben kann. Wird kein Deleter angegeben ist das Default ein Deleter der den Typ löscht mit dem man den shared_ptr initialisiert hat.<br />
Also bei</p>
<pre><code class="language-cpp">shared_ptr&lt;Base&gt; p(new Derived());
</code></pre>
<p>ist alles OK, egal ob Base nen virtuellen dtor hat.<br />
Bei</p>
<pre><code class="language-cpp">Base* MakeDerived();
shared_ptr&lt;Base&gt; p(MakeDerived());
</code></pre>
<p>hätte man ein Problem wenn der Base-dtor nicht virtuell ist, da der shared_ptr ja mit einem Base* initialisiert wird. In dem Fall könnte man einen eigenen Deleter angeben, oder eben einfach den dtor virtuell machen.</p>
<p>Auch Arrays lassen sich über shared_ptr verwalten, eben indem man einen dtor mitgibt der das Array mit &quot;delete []&quot; statt nur &quot;delete&quot; löscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603327</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 23 Oct 2008 11:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to smart pointer und new on Thu, 23 Oct 2008 11:53:58 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Der struct selbst (erwischt, ist keine Klasse) ...</p>
</blockquote>
<p>Nix &quot;erwischt&quot;:<br />
1.) <em>Du</em> hattes von einer Klasse geschrieben:</p>
<p>Seikilos schrieb:</p>
<blockquote>
<p>...was passiert, wenn die Klasse einen char * data; Typ hat?...</p>
</blockquote>
<p>2.) ein &quot;struct&quot; ist in C++ auch eine Klasse.<br />
3.) Ich hatte nichts von &quot;erben gechrieben&quot;. Ein einfacher wrapper kann aggregiereren - und sollte das nach meiner Erfahrung auch tun. (Erben nur da, wo es wirklich notwendig ist bzw. seeehr große Vorteile hat).<br />
4.) Natürlich kannst Du in C++ auch von einem struct erben.</p>
<p>Wenn Du natürlich gar nicht nach einer C++-Lösung (sondern einer C-Lösung) fragst, dann fällt natürlich RAII (und damit smart_pointer) sowieso flach und die Antwort lautet einfach: JA: Ohne RAII muss man sich um solche Sachen selbst kümmern. ... und Du musst malloc()/free() verwenden.</p>
<p>.. und der Fall ist ein Beispiel für:</p>
<p>Simon2. schrieb:</p>
<blockquote>
<p>...<br />
Wenn Du insgesamt allerdings ein Umfeld vorgegeben findest, ... in dem &quot;ownership&quot; weitestgehend &quot;gefrickelt&quot; ist, bleibt Dir nicht viel Anderes übrig, als mitzufrickeln.</p>
</blockquote>
<p>:p <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603356</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 23 Oct 2008 11:53:58 GMT</pubDate></item></channel></rss>