<?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[Zeiger auf Zeiger zauber allokieren und bereinigen]]></title><description><![CDATA[<p>hallo Zusammen,</p>
<p>Ich habe folgende Function geschrieben:</p>
<p>long GetAllUsers(CString **ppstrName, int **ppnGroup)<br />
{<br />
//do something..</p>
<p>*ppstrName = new CString[nRecordCount];<br />
*ppnGroup = new int[nRecordCount];</p>
<p>//do something..<br />
}</p>
<p>Funktion Aufruf:</p>
<p>CString *pstrName = NULL;<br />
int *pnGroup = NULL;</p>
<p>GetAllUsers(&amp;pstrName, &amp;pnGroup);</p>
<p>delete [] pstrName;<br />
delete [] pnGroup;</p>
<p>Ist das sauber Programmiert?</p>
<p>Und noch ein anderer Fall bitte:</p>
<p>class CUser<br />
{<br />
public:<br />
int *m_pnGroup;<br />
CString *m_pstrName;<br />
void GetIDRight();<br />
}</p>
<p>CUser::CUser(CWnd* pParent)<br />
{<br />
m_pnGroup = NULL;<br />
m_pstrName = NULL;<br />
}</p>
<p>void CUser::GetIDRight()<br />
{<br />
GetAllUsers(&amp;m_pstrName, &amp;m_pnGroup);<br />
}</p>
<p>CUser::~CUser(void)<br />
{<br />
if(m_pnGroup != NULL)<br />
{<br />
delete []m_pnGroup;<br />
m_pnGroup = NULL;<br />
}<br />
if(m_pstrName)<br />
{<br />
delete m_pstrName;<br />
m_pstrName = NULL;<br />
}<br />
}</p>
<p>danke für jede Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180204/zeiger-auf-zeiger-zauber-allokieren-und-bereinigen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 16:50:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180204.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Apr 2007 07:13:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Zeiger zauber allokieren und bereinigen on Mon, 30 Apr 2007 07:13:00 GMT]]></title><description><![CDATA[<p>hallo Zusammen,</p>
<p>Ich habe folgende Function geschrieben:</p>
<p>long GetAllUsers(CString **ppstrName, int **ppnGroup)<br />
{<br />
//do something..</p>
<p>*ppstrName = new CString[nRecordCount];<br />
*ppnGroup = new int[nRecordCount];</p>
<p>//do something..<br />
}</p>
<p>Funktion Aufruf:</p>
<p>CString *pstrName = NULL;<br />
int *pnGroup = NULL;</p>
<p>GetAllUsers(&amp;pstrName, &amp;pnGroup);</p>
<p>delete [] pstrName;<br />
delete [] pnGroup;</p>
<p>Ist das sauber Programmiert?</p>
<p>Und noch ein anderer Fall bitte:</p>
<p>class CUser<br />
{<br />
public:<br />
int *m_pnGroup;<br />
CString *m_pstrName;<br />
void GetIDRight();<br />
}</p>
<p>CUser::CUser(CWnd* pParent)<br />
{<br />
m_pnGroup = NULL;<br />
m_pstrName = NULL;<br />
}</p>
<p>void CUser::GetIDRight()<br />
{<br />
GetAllUsers(&amp;m_pstrName, &amp;m_pnGroup);<br />
}</p>
<p>CUser::~CUser(void)<br />
{<br />
if(m_pnGroup != NULL)<br />
{<br />
delete []m_pnGroup;<br />
m_pnGroup = NULL;<br />
}<br />
if(m_pstrName)<br />
{<br />
delete m_pstrName;<br />
m_pstrName = NULL;<br />
}<br />
}</p>
<p>danke für jede Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276043</guid><dc:creator><![CDATA[barcelona]]></dc:creator><pubDate>Mon, 30 Apr 2007 07:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger zauber allokieren und bereinigen on Mon, 30 Apr 2007 07:20:47 GMT]]></title><description><![CDATA[<p>Der erste Code erfüllt auf jeden Fall seinen Zweck <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="😉"
    /> Ich würde aber vermutlich mit Containerklassen arbeiten, die sich selber um ihre Speicherverwaltung kümmern (in deinem Beispiel eine map&lt;string,int&gt; oder ein vector&lt;pair&lt;string,int&gt; &gt;).</p>
<p>Im zweitens Fall gibt es auf jeden Fall zwei Punkte, die überflüssig sind: (a) &quot;delete NULL;&quot; ist im Standard vorgesehen und macht <em>gar nichts</em> (damit entfallen die if(...!=NULL)-Tests) und (b) nach dem Ende des Dtors sind die Member sowieso weg, also brauchst du sie auch nicht mehr auf NULL setzen.<br />
(und du solltest auch hier auf Pointer verzichten und die Daten direkt in deine Klasse packen.</p>
<p>PS: sfds <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/1276050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276050</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Apr 2007 07:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger zauber allokieren und bereinigen on Mon, 30 Apr 2007 07:35:51 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(a) &quot;delete NULL;&quot; ist im Standard vorgesehen und macht <em>gar nichts</em> (damit entfallen die if(...!=NULL)-Tests)</p>
</blockquote>
<p>Das macht diesen Test weder sinnlos noch überflüssig. Zunächst einmal trifft das ganze nur auf die Deallokationsfunktionen der Standardbibliothek zu, eine eigene Überladung darf sich durchaus anders verhalten. Zudem präzisiert der Standard nicht näher, was 'has no effect' eigentlich bedeutet. Auf jeden Fall ist dieses if logisch sinnvoll - denn wo nichts ist, kann auch nichts gelöscht werden; auch wird durch ein delete NULL die natürliche Symmetrie zwischen (erfolgreicher) Allokation und Deallokation aufgehoben. Und nicht zuletzt führt ein solches if in der Regel zu besserer Peformance (wenn der Fall NULL einigermaßen häufig ist), evident z.B. bei auto_ptr - eine Implementation, die hier auf den Test verzichtete, würde erheblich Performance verschenken (denn der Test auf 0 und der Rest drumherum kann ja nach jeder Zuweisung wegoptimiert werden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276056</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 30 Apr 2007 07:35:51 GMT</pubDate></item></channel></rss>