<?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[Loeschen von Arrays im Destruktor]]></title><description><![CDATA[<p>Angenommen ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Test
{
   private: 
     char *array = &quot;12345&quot;;   
     //....diverse andere attribute

   public:
       //..diverse andere Methoden, setter/getter, Konstruktoren,...

      ~Test()
       {
           array=0;

       }
};
</code></pre>
<p>Reicht das array=0 oder muss ich erst noch jeden Eintrag auf 0 setzen und dann am Ende array=0 oder macht das alles der Kompiler automatisch beim Destruktoraufruf?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156494/loeschen-von-arrays-im-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 19:43:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156494.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Aug 2006 08:25:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:25:54 GMT]]></title><description><![CDATA[<p>Angenommen ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Test
{
   private: 
     char *array = &quot;12345&quot;;   
     //....diverse andere attribute

   public:
       //..diverse andere Methoden, setter/getter, Konstruktoren,...

      ~Test()
       {
           array=0;

       }
};
</code></pre>
<p>Reicht das array=0 oder muss ich erst noch jeden Eintrag auf 0 setzen und dann am Ende array=0 oder macht das alles der Kompiler automatisch beim Destruktoraufruf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118926</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:30:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Hier</p>
<pre><code class="language-cpp">char *array = &quot;12345&quot;;
</code></pre>
<p>hast du der Variable array ein Stringliteral zugewiesen. Das brauchst du nicht löschen. array sollte hier auch const sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118930</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:30:26 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:31:36 GMT]]></title><description><![CDATA[<p>Genau genommen ist der Aufruf &quot;array=0;&quot; sogar überflüssig, da die Variable 'array' am Ende des Destruktors sowieso im Nirvana verschwindet. Solange du nur auf externe Daten verweist (wie in deinem Fall ein konstanter C-String), brauchst du dich im Destruktor nicht darum zu kümmern. Nur wenn du das Array selber angelegt hast (z.B. mit &quot;array=new char[...];&quot;), mußt du es wieder entsorgen (dazu brauchst du &quot;delete[] array;&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118932</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:34:51 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Hier</p>
<pre><code class="language-cpp">char *array = &quot;12345&quot;;
</code></pre>
<p>hast du der Variable array ein Stringliteral zugewiesen. Das brauchst du nicht löschen.</p>
</blockquote>
<p>Warum nicht?</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>array sollte hier auch const sein.</p>
</blockquote>
<p>Warum? Das kommt darauf an was ich damit machen will und ist aus diesem Beispiel nicht ersichtlich. Will ich das Array auch mal ändern macht const keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118934</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:40:02 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Genau genommen ist der Aufruf &quot;array=0;&quot; sogar überflüssig, da die Variable 'array' am Ende des Destruktors sowieso im Nirvana verschwindet. Solange du nur auf externe Daten verweist (wie in deinem Fall ein konstanter C-String), brauchst du dich im Destruktor nicht darum zu kümmern. Nur wenn du das Array selber angelegt hast (z.B. mit &quot;array=new char[...];&quot;), mußt du es wieder entsorgen (dazu brauchst du &quot;delete[] array;&quot;).</p>
</blockquote>
<p>Ja das ist klar.</p>
<p>Geht eigentlich auch sowas:<br />
array=new *char ...;</p>
<p>und dann löschen mit delete[] array; ?</p>
<p>*char ist ja auch ein Array oder schaut der Compiler nach dem new[] mit den Klammern und meckert dann wenn ich delete[] verwende, weil ich eben new *char benutzt habe und nicht new char[]?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118941</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:40:02 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:42:38 GMT]]></title><description><![CDATA[<p>Gast-1 schrieb:</p>
<blockquote>
<p>Angenommen ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Test
{
   private: 
     char *array = &quot;12345&quot;;   
     //....diverse andere attribute

   public:
       //..diverse andere Methoden, setter/getter, Konstruktoren,...

      ~Test()
       {
           array=0;
           
       }
};
</code></pre>
<p>Reicht das array=0 oder muss ich erst noch jeden Eintrag auf 0 setzen und dann am Ende array=0 oder macht das alles der Kompiler automatisch beim Destruktoraufruf?</p>
</blockquote>
<p>Hi,</p>
<p>das kommt ganz darauf an, was Du bewirken möchtest.<br />
Ich denke mal, in Deinem Fall ist das komplett unnötig/sinnlos/verwirrend.<br />
Mal ganz grundlegend:</p>
<ul>
<li>Mit</li>
</ul>
<pre><code class="language-cpp">&quot;12345&quot;
</code></pre>
<p>legst Du schon zur Compilezeit Speicher an. Den kannst Du nicht mehr zur Laufzeit ändern, Löschen, .... =&gt; &quot;delete&quot; o-ä. kommt nicht infrage</p>
<ul>
<li>Mit</li>
</ul>
<pre><code class="language-cpp">char* array = &quot;12345&quot;;
</code></pre>
<p>drückst Du aus, dass Du einen Zeiger namens array auf diesen Speicherbereich zeigen lassen willst UND sowohl den Zeiger auf etwas anderes zeigen lassen , als auch den Wert, auf den er zeigt, ändern können willst.</p>
<ul>
<li>Letzteres widerspricht schonmal Punkt 1, weswegen Du mindestens schreiben solltest:</li>
</ul>
<pre><code class="language-cpp">char const *array = &quot;12345&quot;;
</code></pre>
<p>(alternativ &quot;const char*&quot; - ist dasselbe) Eigentlich sollte der Compiler das auch anmeckern (min. als Warnung)<br />
Diese Deklaration hätte Deine Frage mit einfachem Ausprobieren beantwortet: &quot;delete&quot; darfst Du auf keinen solchen Pointer anwenden. <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>
<ul>
<li>Soll &quot;array&quot; auch niemals auf etwas anderes zeigen als auf diesen Speicherbereich, dann sollte der Zeiger selbst auch als &quot;const&quot; deklariert werden:</li>
</ul>
<pre><code class="language-cpp">char const * const array = &quot;12345&quot;;
</code></pre>
<p>Auf jeden Fall: Solchen Speicher kannst/darfst Du nicht &quot;löschen&quot;.<br />
Du kannst natürlich im Destruktor array auf 0 setzen (wenn Du ihn nur &quot;char const * array&quot; deklariert hast) ... aber wozu ? Nach Abarbeten des Destruktors hört das Objekt sowieso auf, zu existieren, weswegen der &quot;letzte Wert arrays vor dem Ableben&quot; nicht mehr interessiert. <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>EDIT sagt, dass ich einfach zu langsam schreibe !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118944</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:43:30 GMT]]></title><description><![CDATA[<p>&quot;12345&quot; ist ein Stringliteral un wird vom Compiler als const char* aufgefasst. Du darfst darin nichts ändern. Dieses Literal wird vom Compiler an einer festen Stell im Speicher abgelegt und beim Beenden des Programmes aufgeräumt, also ist kein Löschen notwendig. Wenn du mit deinem String etwas machen willst solltest du den String dynamisch erstellen und mit strcpy zuweisen oder <strong>besser</strong> gleich mit std::string arbeiten.<br />
[edit]etwas spät <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="🙂"
    /> [edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118945</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:46:58 GMT]]></title><description><![CDATA[<p>Gast-1 schrieb:</p>
<blockquote>
<p>Warum? Das kommt darauf an was ich damit machen will und ist aus diesem Beispiel nicht ersichtlich. Will ich das Array auch mal ändern macht const keinen Sinn.</p>
</blockquote>
<p>String-Literale <strong>sind</strong> const (daß du mit einem nicht-konstanten Zeiger darauf verweisen darfst, hat etwas mit Abwärtskompatibilität zu tun), da löst du nur eine Schutzverletzung aus, wenn du dieses Array ändern willst.</p>
<p>Wenn du etwas wirklich änderbares haben willst, mußt du selber den Speicher bereitstellen:</p>
<pre><code class="language-cpp">class Test
{
  char array[10];
public:
  Test()
  {
    strcpy(array,&quot;12345&quot;);
  }
};

//oder

class Test
{
  char*array;
public:
  Test() : array(new char[10])
  {
    strcpy(array,&quot;12345&quot;);
  }
  ~Test()
  {
     delete[]array;
  }
};
</code></pre>
<p>(die letzte Variante braucht noch Copy-Construktor und op=)</p>
<p>Oder du verwendest gleich C++ Bordmittel - std::string oder std::vector&lt;&gt;.</p>
<p>Gast-1 schrieb:</p>
<blockquote>
<p>*char ist ja auch ein Array oder schaut der Compiler nach dem new[] mit den Klammern und meckert dann wenn ich delete[] verwende, weil ich eben new *char benutzt habe und nicht new char[]?</p>
</blockquote>
<p>In dem Zusammenhang ist '*char' <strong>kein</strong> Array, sondern ein Zeiger - da würde der Compiler schon meckern, wenn du dessen Adresse im falschen Datentyp unterbringen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118950</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 08:51:48 GMT]]></title><description><![CDATA[<p>Also gut dann sieht meine Klasse so aus: Die Klasse soll einen Text<br />
in einem char-Array aufnehmen und les und schreibbar sein:</p>
<pre><code class="language-cpp">class Test
{
   private: 
     char *array;

   public:
       Test(char *c)
       {
            array=c;
       }

       *char getText()  const
       {  return array; }

       void setText(const char *c) const
       {  array = c };

      ~Test()
       {
           //Was steht hier?

       }
};
</code></pre>
<blockquote>
<p>Mit &quot;12345&quot; legst Du schon zur Compilezeit Speicher an. Den kannst Du nicht mehr zur Laufzeit ändern, Löschen, ....</p>
</blockquote>
<p>Achso, wusste ich nicht dass der nicht mehr änderbar ist.</p>
<blockquote>
<p>Mit char* array = &quot;12345&quot;;<br />
drückst Du aus, dass Du einen Zeiger namens array auf diesen Speicherbereich zeigen lassen willst UND sowohl den Zeiger auf etwas anderes zeigen lassen , als auch den Wert, auf den er zeigt, ändern können willst.</p>
</blockquote>
<p>Ich dachte char *array = &quot;12345&quot;;<br />
ist das selbe wie char[] = &quot;12345&quot;;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118958</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:02:22 GMT]]></title><description><![CDATA[<p>Also deine Klasse kann so nicht funktionieren - in der Methode setText() sind die const's zu viel.</p>
<p>(btw, char*a und char a[] sind nicht identisch - ersterer deklariert einen Zeiger auf (normalerweise) fremde Speicherbereiche, letzterer legt selber einen entsprechend großen Speicherblock an)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118969</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:04:48 GMT]]></title><description><![CDATA[<p>Hi!</p>
<pre><code class="language-cpp">*char getText()  const
</code></pre>
<p>Da is ein Syntaxfehler, der Stern is falsch gesetzt.</p>
<pre><code class="language-cpp">~Test()
{
      //Was steht hier?         
}
</code></pre>
<p>Garnix steht da...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118971</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:04:59 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//oder
class Test
{
  char*array;

public:
  Test() : array(new char[10])
  {
    strcpy(array,&quot;12345&quot;);
  }
  ~Test()
  {
     delete[]array;
  }
};
</code></pre>
<p>(die letzte Variante braucht noch Copy-Construktor und op=)</p>
</blockquote>
<p>Genau sowas meinte ich, danke.<br />
Das mit den Zeigern und Arrays (genauer char arrays) bereitet mir immer noch Probleme.</p>
<blockquote>
<p>Oder du verwendest gleich C++ Bordmittel - std::string oder std::vector&lt;&gt;.</p>
</blockquote>
<p>Ja, klar aber das mit den Arrays und den Zeigern darauf und im Zusammenahng mit Klassen sollte man trotzdem kapieren, deshalb meine Frage hier ins Forum.</p>
<p>Ich muss mal wieder die entsprechenden Kapitel in meinen Büchern durcharbeiten, ist lange her, als ich mit C++ zu tun hatte und das damals auch nur sporadisch, wie man unschwer an meinen dilettantischen Fragen erkennen konnte <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>Danke an euch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118972</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:14:24 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Also deine Klasse kann so nicht funktionieren - in der Methode setText() sind die const's zu viel.</p>
</blockquote>
<p>Stimmt, sonst wäre es nicht änderbar.</p>
<p>Und der der Stern in getText() ist auch falsch, war ein Vertipper.</p>
<blockquote>
<p>(btw, char*a und char a[] sind nicht identisch - ersterer deklariert einen Zeiger auf (normalerweise) fremde Speicherbereiche, letzterer legt selber einen entsprechend großen Speicherblock an)</p>
</blockquote>
<p>Ja, das muss ich nochmal in Ruhe nachlesen, das muss man sicher beherrschen, sonst wird das nix mit einem funktionierenden Programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118985</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:16:24 GMT]]></title><description><![CDATA[<p>Gast-1 schrieb:</p>
<blockquote>
<p>...<br />
Das mit den ... char arrays ...bereitet mir immer noch Probleme.<br />
...</p>
</blockquote>
<p>Da das allen so geht, wurden ja Hilfsmittel wie string und die STL-Container geschrieben. <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="😉"
    /><br />
Aber es ist natürlich löblich, sich um korrektes Ressourcenhandling zu kümmern. Leider gibt's da keinen &quot;Globalfall&quot;, sondern man muß für sich bei der Modellierung jedesmal wieder neu Gedanken darüber machen, <em>wem</em> jetzt eigentlich <em>was</em> gehört (und der ist dann für das Erzeugen und Löschen verantwortlich - im Idealfall).</p>
<p>BTW:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>...<br />
(btw, char*a und char a[] sind nicht identisch - ersterer deklariert einen Zeiger auf (normalerweise) fremde Speicherbereiche, letzterer legt selber einen entsprechend großen Speicherblock an)</p>
</blockquote>
<p>Ich denke, er meinte eine Deklaration wie:</p>
<pre><code class="language-cpp">char const *a1 = &quot;12345&quot;;
    char const a2[] = &quot;67890&quot;;
</code></pre>
<p>In dem Zusammenhang ist das schon (im Wesentlichen) &quot;dasselbe&quot; (zumindestens kann man a1 und a2 identisch verwenden).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118988</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:27:34 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>In dem Zusammenhang ist das schon (im Wesentlichen) &quot;dasselbe&quot; (zumindestens kann man a1 und a2 identisch verwenden).</p>
</blockquote>
<pre><code class="language-cpp">cout &lt;&lt; sizeof(a1) &lt;&lt; endl;
cout &lt;&lt; sizeof(a2) &lt;&lt; endl;
</code></pre>
<p>Nope. <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/1118997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118997</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 09:39:30 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>In dem Zusammenhang ist das schon (im Wesentlichen) &quot;dasselbe&quot; (zumindestens kann man a1 und a2 identisch verwenden).</p>
</blockquote>
<pre><code class="language-cpp">cout &lt;&lt; sizeof(a1) &lt;&lt; endl;
cout &lt;&lt; sizeof(a2) &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Interessant was man hier alles erfährt ich glaube ich sollte mir mal ein neues Buch kaufen. Was empfehlt ihr denn als zeitgemässes Werk das auch solche C-Stolperfallen enthält oder sollte man sich dafür ein separates C-Buch kaufen? Dieses Zeigergewurschtel hat ja eigentlich nichts mit C++ zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119010</guid><dc:creator><![CDATA[Gast-1]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 11:36:50 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>In dem Zusammenhang ist das schon (im Wesentlichen) &quot;dasselbe&quot; (zumindestens kann man a1 und a2 identisch verwenden).</p>
</blockquote>
<pre><code class="language-cpp">cout &lt;&lt; sizeof(a1) &lt;&lt; endl;
cout &lt;&lt; sizeof(a2) &lt;&lt; endl;
</code></pre>
<p>Nope. <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>
</blockquote>
<p>Mir ist das schon klar, dass es nicht dasselbe ist....<br />
Deshalb mein &quot;im Wesentlichen&quot; und die Anführungszeichen um &quot;dasselbe&quot; .... damit meinte ich die Dinge, die unser Gast damit machen möchte: Zugreifen auf die Dateninhalte, Index-Verwendung, Pointerarithmetik, Allokationsverantwortung (ja, ich weiß, dass der Compiler dabei zwischen [] und * unterscheidet), ....<br />
und wenn ich recht informiert bin, legt</p>
<pre><code class="language-cpp">char const array[] = &quot;12345&quot;;
</code></pre>
<p>nicht mehr den Speicher an als</p>
<pre><code class="language-cpp">char const *array = &quot;12345&quot;;
</code></pre>
<p>... was aber CStolls Grundbehauptung war. <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>Gast-1 schrieb:</p>
<blockquote>
<p>...sollte man sich dafür ein separates C-Buch kaufen? Dieses Zeigergewurschtel hat ja eigentlich nichts mit C++ zu tun.</p>
</blockquote>
<p>Ich würde trotzdem ein C++-Buch vorziehen, weil da doch ein paar &quot;Kleinigkeiten&quot; anders laufen.<br />
Leider kann ich Dir dazu kein spezielles Werk empfehlen, weil ich mir selbst so'n Zeug aus unterschiedlichen Quellen zusammenklaube (aber für mich ist &quot;Die C++-Programmiersprache&quot; von Stroustrup - aktuellste Ausgabe - ein wichtiger Ausgangspunkt).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119097</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 11:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 11:46:51 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Mir ist das schon klar, dass es nicht dasselbe ist....<br />
Deshalb mein &quot;im Wesentlichen&quot; und die Anführungszeichen um &quot;dasselbe&quot; ....</p>
</blockquote>
<p>&lt;spitzfindig&gt; In der Klammer schreibst Du aber ohne Einschränkung und Anführungszeichen &quot;identisch&quot; &lt;/spitzfindig&gt;</p>
<blockquote>
<p>und wenn ich recht informiert bin, legt</p>
<pre><code class="language-cpp">char const array[] = &quot;12345&quot;;
</code></pre>
<p>nicht mehr den Speicher an als</p>
<pre><code class="language-cpp">char const *array = &quot;12345&quot;;
</code></pre>
<p>... was aber CStolls Grundbehauptung war. <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>
</blockquote>
<p>Wie ist der Satz zu verstehen? Wenn Du meinst, dass er in beiden Fällen keinen Heap-Speicher allokiert, hast Du recht. Im Sinne von &quot;Speicher anlegen&quot; wird aber die erste Variante (wenn in einer Funktion) auf dem Stack angelegt, bei der zweiten liegt der Text in irgendeinem (potentiell read-only) Datenbereich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119106</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 11:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 12:29:39 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...</p>
<p>&lt;spitzfindig&gt; In der Klammer schreibst Du aber ohne Einschränkung und Anführungszeichen &quot;identisch&quot; &lt;/spitzfindig&gt;</p>
</blockquote>
<p>Hi,</p>
<p>Wenn schon spitzfindig, dann richtig: Da</p>
<pre><code class="language-cpp">cout &lt;&lt; a1;
    cout &lt;&lt; a2;
</code></pre>
<p>beide verwendbar sind, kann ich sie &quot;identisch verwenden&quot; (vielleicht nicht in jedem Zusammenhang, aber das habe ich ja auch nicht behauptet). :p <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="😉"
    /><br />
Aber lass uns das mal beiseite legen.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>...<br />
...wird aber die erste Variante (wenn in einer Funktion) auf dem Stack angelegt, ...</p>
</blockquote>
<p>EDIT: Hab's schon gefunden:<br />
<a href="http://c-faq.com/aryptr/" rel="nofollow">http://c-faq.com/aryptr/</a><br />
bzw. direkt:<br />
<a href="http://c-faq.com/aryptr/aryptr2.html" rel="nofollow">http://c-faq.com/aryptr/aryptr2.html</a></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119134</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 12:29:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char const array[] = &quot;1234&quot;;
</code></pre>
<p>Dies legt implizit ein Array der Größe 5 an und kopiert den String (+abschl. Null-Zeichen) in das Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119141</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:29:59 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 12:34:24 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char const array[] = &quot;1234&quot;;
</code></pre>
<p>Dies legt implizit ein Array der Größe 5 an und kopiert den String (+abschl. Null-Zeichen) in das Array.</p>
</blockquote>
<p>Was aber auch bedeutet, dass die Poinervariante const sein <strong>muss</strong>, während die []-Variante auch non-const sein darf ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119147</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Loeschen von Arrays im Destruktor on Thu, 17 Aug 2006 12:58:52 GMT]]></title><description><![CDATA[<p>Da hast du völlig recht, auch wenn Compilerhersteller das bisweilen anders sehen (was die const-correctness anbelangt) <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>Tatsächlich darf ein Programm abstürzen, wenn man bei der Pointervariante am String herummanipuliert. (Page Fault auf einer Read-Only Page wäre z.B. denkbar)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119177</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:58:52 GMT</pubDate></item></channel></rss>