<?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[Speicherleaks]]></title><description><![CDATA[<p>Hi <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="🙂"
    /></p>
<p>ich lasse mir durch <strong>_CrtDumpMemoryLeaks();</strong> meine Leaks anzeigen.<br />
Seit ich mein ganzes programm Objektorientiert gemacht habe sind einige sehr große Leaks enstanden.</p>
<p>und ich frage mich was z.b. Uhrsachen dafür sein könnten.<br />
Z.B. ist folgender Destructor richtig?</p>
<pre><code>Hexapod :: Hexapod(D3DXVECTOR3* CamPos)
{
	m_CamPos	= CamPos;

	unsigned int i;
	for(i = 0; i &lt; 6; i++)
	{
		m_bein[i] = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
	}
}

Hexapod :: ~Hexapod()
{
	unsigned int i;
	for(i = 0; i &lt; 6; i++)	delete m_bein[i];
}
</code></pre>
<p>Ich vermute dort ist ein Fehler. Die Klasse Leg hat viele Daten, vorallem Matrizen. ich denke Hier ist sicherlich ein Leek, denn im Dump stehen 6 große leeks der selben größe:</p>
<pre><code>Dumping objects -&gt;
{184} normal block at 0x00AB8BB8, 104 bytes long.
 Data: &lt;    h^   \   ]  &gt; 1C F7 1C 00 68 5E AB 00 D0 5C AB 00 10 5D AB 00 
{183} normal block at 0x00AB8B20, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{182} normal block at 0x00AB8678, 1132 bytes long.
 Data: &lt;                &gt; 20 8B AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{181} normal block at 0x00AB85E0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{180} normal block at 0x00AB8138, 1132 bytes long.
 Data: &lt;                &gt; E0 85 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{179} normal block at 0x00AB80A0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{178} normal block at 0x00AB7BF8, 1132 bytes long.
 Data: &lt;                &gt; A0 80 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{177} normal block at 0x00AB7B60, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{176} normal block at 0x00AB76B8, 1132 bytes long.
 Data: &lt;`{              &gt; 60 7B AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{175} normal block at 0x00AB7620, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{174} normal block at 0x00AB7178, 1132 bytes long.
 Data: &lt; v              &gt; 20 76 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{173} normal block at 0x00AB70E0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{172} normal block at 0x00AB6C38, 1132 bytes long.
 Data: &lt; p              &gt; E0 70 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{141} normal block at 0x00AB5CC0, 440 bytes long.
 Data: &lt;          HB  I@&gt; 00 00 00 00 00 00 00 00 00 00 48 42 D8 0F 49 40 
Object dump complete.
</code></pre>
<p>wenn ich <strong>delete[] m_leg;</strong> mache kriege ich einen Laufzeitfehler beim schließen des Programms.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310593/speicherleaks</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 13:18:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310593.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Nov 2012 21:17:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 13:31:05 GMT]]></title><description><![CDATA[<p>Hi <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="🙂"
    /></p>
<p>ich lasse mir durch <strong>_CrtDumpMemoryLeaks();</strong> meine Leaks anzeigen.<br />
Seit ich mein ganzes programm Objektorientiert gemacht habe sind einige sehr große Leaks enstanden.</p>
<p>und ich frage mich was z.b. Uhrsachen dafür sein könnten.<br />
Z.B. ist folgender Destructor richtig?</p>
<pre><code>Hexapod :: Hexapod(D3DXVECTOR3* CamPos)
{
	m_CamPos	= CamPos;

	unsigned int i;
	for(i = 0; i &lt; 6; i++)
	{
		m_bein[i] = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
	}
}

Hexapod :: ~Hexapod()
{
	unsigned int i;
	for(i = 0; i &lt; 6; i++)	delete m_bein[i];
}
</code></pre>
<p>Ich vermute dort ist ein Fehler. Die Klasse Leg hat viele Daten, vorallem Matrizen. ich denke Hier ist sicherlich ein Leek, denn im Dump stehen 6 große leeks der selben größe:</p>
<pre><code>Dumping objects -&gt;
{184} normal block at 0x00AB8BB8, 104 bytes long.
 Data: &lt;    h^   \   ]  &gt; 1C F7 1C 00 68 5E AB 00 D0 5C AB 00 10 5D AB 00 
{183} normal block at 0x00AB8B20, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{182} normal block at 0x00AB8678, 1132 bytes long.
 Data: &lt;                &gt; 20 8B AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{181} normal block at 0x00AB85E0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{180} normal block at 0x00AB8138, 1132 bytes long.
 Data: &lt;                &gt; E0 85 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{179} normal block at 0x00AB80A0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{178} normal block at 0x00AB7BF8, 1132 bytes long.
 Data: &lt;                &gt; A0 80 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{177} normal block at 0x00AB7B60, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{176} normal block at 0x00AB76B8, 1132 bytes long.
 Data: &lt;`{              &gt; 60 7B AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{175} normal block at 0x00AB7620, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{174} normal block at 0x00AB7178, 1132 bytes long.
 Data: &lt; v              &gt; 20 76 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{173} normal block at 0x00AB70E0, 92 bytes long.
 Data: &lt;                &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{172} normal block at 0x00AB6C38, 1132 bytes long.
 Data: &lt; p              &gt; E0 70 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 
{141} normal block at 0x00AB5CC0, 440 bytes long.
 Data: &lt;          HB  I@&gt; 00 00 00 00 00 00 00 00 00 00 48 42 D8 0F 49 40 
Object dump complete.
</code></pre>
<p>wenn ich <strong>delete[] m_leg;</strong> mache kriege ich einen Laufzeitfehler beim schließen des Programms.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271261</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 13:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 21:25:19 GMT]]></title><description><![CDATA[<p>Der Array m_bein wird automatisch gelöscht im Destructor, also benutz doch einfach unique_ptr und du hast keine Probleme mehr mit memoryleeks <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271265</guid><dc:creator><![CDATA[meepmeep]]></dc:creator><pubDate>Thu, 15 Nov 2012 21:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 21:39:20 GMT]]></title><description><![CDATA[<p>unique ptr höre ich grade zum ersten mal <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="😞"
    /><br />
ok ich hab jetzt ein bisschen dazu gelesen.<br />
aber in meinem konkreten beispiel sollte das doch trozdem funktionieren oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271271</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Thu, 15 Nov 2012 21:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 21:47:54 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Seit ich mein ganzes programm Objektorientiert gemacht habe sind einige sehr große Leeks enstanden.</p>
</blockquote>
<p>OOP != new/delete. Die sind bei dir ohnehin unnötig. Warum hast du ein Array von Zeigern und kein normales Array?</p>
<p>OOP in C++ heisst RAII. Wenn du alles mit RAII machst und alle Zeiger als unique_ptr hältst, können prinzipiell keine Speicherlecks entstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271273</guid><dc:creator><![CDATA[gedächtnislücke]]></dc:creator><pubDate>Thu, 15 Nov 2012 21:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 21:49:03 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>aber in meinem konkreten beispiel sollte das doch trozdem funktionieren oder?</p>
</blockquote>
<p>Das sieht korrekt aus. Da du aber nur Schnipsel zeigst, kann da trotzdem noch etwas falsch sein ( z.B. Leg ist abgeleitet und die Basisklasse hat keinen virtuellen destruktor, das array enthält aber Zeiger auf die Basis)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271274</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 15 Nov 2012 21:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 21:50:10 GMT]]></title><description><![CDATA[<p>Der gepostete Code ist ok. Benutzt du noch an anderen Stellen new/delete?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271275</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 15 Nov 2012 21:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 22:03:28 GMT]]></title><description><![CDATA[<p>ja ich nutze hier und da weitere <strong>delete/new</strong>.<br />
Aber ich will hier nicht umbedingt alles mit 1-2 tausend zeilen code vollschreiben <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="😞"
    /><br />
ich konzentriere mich mal auf Leg und Hexapod.<br />
Ich vermute hier ja immernoch den größten fehler wegen der Dumps.</p>
<p><strong>Hexapod .h und .cpp</strong></p>
<pre><code>#ifndef HEXAPOD_H_CL90
#define HEXAPOD_H_CL90

#include &quot;init_configuration.h&quot;
#include &quot;leg.h&quot;

class Hexapod
{
	public:
		Hexapod(D3DXVECTOR3* CamPos);
		~Hexapod();

		leg*				get_leg(int number);

	private:

		leg*				m_bein[6];

		D3DXVECTOR3*		m_CamPos;
};

#endif
</code></pre>
<pre><code>#include &quot;hexapod.h&quot;

Hexapod :: Hexapod(D3DXVECTOR3* CamPos)
{
	m_CamPos	= CamPos;

	unsigned int i;
	for(i = 0; i &lt; 6; i++)
	{
		m_bein[i] = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
	}
}

Hexapod :: ~Hexapod()
{
	unsigned int i;
	for(i = 0; i &lt; 6; i++)	delete m_bein[i];
}
leg*				Hexapod :: get_leg(int number)
{
	if(number &gt;= 0 &amp;&amp; number &lt; 6)
	{
		return m_bein[number];
	}
	return m_bein[0];
}
</code></pre>
<p><strong>Leg .h und .cpp</strong></p>
<pre><code>#ifndef LEG_H_CL90
#define LEG_H_CL90

#include &quot;init_configuration.h&quot;
#include &quot;iKin_math.h&quot;

class leg
{
	public:
		leg(D3DXVECTOR3* CamPos, float x, float y, float z,  float degAngel);
		~leg();

		void				set_Target	(float x, float y, float z);
		D3DXVECTOR3			get_Target	();
		iKin_math*			get_iKin	();
		void				set_angle	(int servo, float angle);
		void				set_angle	(float an1, float an2, float an3, float an4);
		float				get_angle	(int servo);
		float				get_length	(int part);
		D3DXVECTOR3			get_posVec	(int counter);

		D3DXMATRIX			get_matTransform(int number);
		D3DXMATRIX*			get_matSizePtr();
		D3DXMATRIX*			get_matAxisSizePtr();
		D3DXMATRIX*			get_mat90Ptr();

	private:

		iKin_math*			m_iKin;

		void				m_refresh_transform();
		float				m_angle[4];
		D3DXMATRIX			m_matTransform[6];
		D3DXVECTOR3			m_Origin;
		D3DXVECTOR3			m_posVec[5];
		D3DXVECTOR3			m_Target;

		static	float		m_length[4];
		static	float		m_PI;

		D3DXMATRIX			m_matRot90;
		D3DXMATRIX			m_matTurn;
		D3DXMATRIX			m_matDir;
		D3DXMATRIX			m_matSize;
		D3DXMATRIX			m_matAxisSize;
		D3DXMATRIX			m_matTransPos;
		D3DXMATRIX			m_matTransSO;
		D3DXMATRIX			m_matTransVS;
		D3DXMATRIX			m_matTransOS;
		D3DXMATRIX			m_matTransUS;

		D3DXVECTOR3*		m_CamPos;
};

#endif
</code></pre>
<pre><code>#include &quot;leg.h&quot;

float leg::m_PI			= 3.141592f;
float leg::m_length[4]	= {3.29f,	1.5f,	6.78f, 8.07f};

leg :: leg(D3DXVECTOR3* CamPos, float x, float y, float z,  float degAngel)
{
	m_Origin	= D3DXVECTOR3(x, y, z);

	D3DXMatrixScaling		(&amp;m_matSize,	     0.1f, 0.1f, 0.1f);
	D3DXMatrixScaling		(&amp;m_matAxisSize,   0.05f, 2.0f, 0.05f);
	D3DXMatrixRotationZ		(&amp;m_matRot90,		D3DXToRadian(-90));
	D3DXMatrixRotationY		(&amp;m_matTurn,		D3DXToRadian(180));
	D3DXMatrixRotationY		(&amp;m_matDir,	   D3DXToRadian(degAngel));
	D3DXMatrixTranslation	(&amp;m_matTransPos,			  x, y, z);
	D3DXMatrixTranslation	(&amp;m_matTransSO,    -m_length[0], 0, 0);
	D3DXMatrixTranslation	(&amp;m_matTransVS,		0, m_length[1], 0);
	D3DXMatrixTranslation	(&amp;m_matTransOS,		0, m_length[2], 0);
	D3DXMatrixTranslation	(&amp;m_matTransUS,		0, m_length[3], 0);

	m_CamPos	= CamPos;

	m_iKin		= new iKin_math(&amp;m_Origin, &amp;m_Target);

	set_angle	(0.0f, 0.0f, 0.0f, 0.0f);

	m_Target	= D3DXVECTOR3(10.0f, 0.0f, 0.0f);
}

leg ::~leg()
{
	delete m_iKin;
}
void leg :: set_Target	(float x, float y, float z)
{
	m_Target = D3DXVECTOR3(x, y, z);
	//m_iKin-&gt;calc_Ang();
	m_iKin-&gt;calc_Ang2();
	set_angle(m_iKin-&gt;get_Angle(0), m_iKin-&gt;get_Angle(1), m_iKin-&gt;get_Angle(2), m_iKin-&gt;get_Angle(3));
}
D3DXVECTOR3 leg :: get_Target()
{
	return m_Target;
}
iKin_math*	leg :: get_iKin()
{
	return m_iKin;
}
void leg ::	set_angle(int servo, float angle)
{
	if(servo &gt;= 0 &amp;&amp; servo &lt; 4)
	{
		m_angle[servo] = angle;
	}
	m_refresh_transform();
}
void leg :: set_angle(float an1, float an2, float an3, float an4)
{
	m_angle[0] = an1;
	m_angle[1] = an2;
	m_angle[2] = an3;
	m_angle[3] = an4;
	m_refresh_transform();
}
float leg :: get_angle(int servo)
{
	if(servo &gt;= 0 &amp;&amp; servo &lt; 4)
	{
		return m_angle[servo];
	}
	return 0;
}
float leg :: get_length(int part)
{
	if(part &gt;= 0 &amp;&amp; part &lt; 4)
	{
		return m_length[part];
	}
	return -1.0f;
}
D3DXVECTOR3 leg :: get_posVec(int counter)
{
	if(counter &gt;= 0 &amp;&amp; counter &lt; 5)
	{
		return m_posVec[counter];
	}
	return D3DXVECTOR3(0.0f, 0.0f, 0.0f);
}
D3DXMATRIX leg :: get_matTransform(int number)
{
	if(number &gt;= 0 &amp;&amp; number &lt; 6)
	{
		return m_matTransform[number];
	}
	return m_matTransform[0];
}
D3DXMATRIX* leg :: get_matSizePtr()
{
	return &amp;m_matSize;
}
D3DXMATRIX* leg :: get_matAxisSizePtr()
{
	return &amp;m_matAxisSize;
}
D3DXMATRIX* leg :: get_mat90Ptr()
{
	return &amp;m_matRot90;
}
void leg :: m_refresh_transform()
{
	D3DXMATRIX	matRotAngle1;
	D3DXMATRIX	matRotAngle2;
	D3DXMATRIX	matRotAngle3;
	D3DXMATRIX	matRotAngle4;

	D3DXMatrixRotationX(&amp;matRotAngle1,	m_angle[0]);
	D3DXMatrixRotationY(&amp;matRotAngle2, -m_angle[1]);
	D3DXMatrixRotationZ(&amp;matRotAngle3, -m_angle[2]);
	D3DXMatrixRotationZ(&amp;matRotAngle4,	m_PI-m_angle[3]);

	m_matTransform[0]	= m_matTurn * m_matRot90 * m_matTransSO * m_matDir * m_matTransPos;
	m_posVec[0]			= D3DXVECTOR3(m_matTransform[0]._41, m_matTransform[0]._42, m_matTransform[0]._43);

	m_matTransform[1]	= m_matTurn * m_matRot90 * matRotAngle1* m_matDir  * m_matTransPos;
	m_posVec[1]			= D3DXVECTOR3(m_matTransform[1]._41, m_matTransform[1]._42, m_matTransform[1]._43);

	m_matTransform[2]	= m_matTurn * m_matRot90 * matRotAngle2 * matRotAngle1 * m_matDir * m_matTransPos;

	m_matTransform[3]	= matRotAngle3 * m_matTransVS * m_matTurn * m_matRot90 * matRotAngle2 * matRotAngle1* m_matDir * m_matTransPos;
	m_posVec[2]			= D3DXVECTOR3(m_matTransform[3]._41, m_matTransform[3]._42, m_matTransform[3]._43);

	m_matTransform[4]	= matRotAngle4 * m_matTransOS * matRotAngle3 * m_matTransVS * m_matTurn * m_matRot90 * matRotAngle2 * matRotAngle1 * m_matDir * m_matTransPos;
	m_posVec[3]			= D3DXVECTOR3(m_matTransform[4]._41, m_matTransform[4]._42, m_matTransform[4]._43);

	m_matTransform[5]	= m_matTransUS * matRotAngle4 * m_matTransOS * matRotAngle3 * m_matTransVS * m_matTurn * m_matRot90 * matRotAngle2 * matRotAngle1 * m_matDir * m_matTransPos;
	m_posVec[4]		= D3DXVECTOR3(m_matTransform[5]._41, m_matTransform[5]._42, m_matTransform[5]._43);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271277</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Thu, 15 Nov 2012 22:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 22:15:05 GMT]]></title><description><![CDATA[<p>Ich wiederhohle: Warum</p>
<pre><code class="language-cpp">leg* m_bein[6];
</code></pre>
<p>und nicht</p>
<pre><code class="language-cpp">leg m_bein[6];
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271279</guid><dc:creator><![CDATA[gedächtnislücke]]></dc:creator><pubDate>Thu, 15 Nov 2012 22:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Thu, 15 Nov 2012 23:04:06 GMT]]></title><description><![CDATA[<p>Warum hälst du soviele Daten als Zeiger und nicht als normale Variable zB:</p>
<pre><code>leg*                m_bein[6];
D3DXVECTOR3*        m_CamPos;
</code></pre>
<p>Das gleiche für die Rückgabetypen deiner Funktionen.</p>
<p>Es sieht ein bischen danach aus als würdest du dir nicht ganz einig sein wer wann welche Besitzrechte übernimmt und damit verantwortlich für die zerstörung der Speicherbereiche ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271285</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 15 Nov 2012 23:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 00:13:15 GMT]]></title><description><![CDATA[<p>Was ist mit campos?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271302</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 16 Nov 2012 00:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 07:38:40 GMT]]></title><description><![CDATA[<p>gedächtnislücke schrieb:</p>
<blockquote>
<p>... und alle Zeiger als unique_ptr hältst, können prinzipiell keine Speicherlecks entstehen.</p>
</blockquote>
<p>doch, ist bei mir jedenfalls noch so -.-<br />
aber die bibliothek die ich nutze fummelt sehr viel mit rohenzeigern rum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271336</guid><dc:creator><![CDATA[sky@logoff]]></dc:creator><pubDate>Fri, 16 Nov 2012 07:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 08:58:59 GMT]]></title><description><![CDATA[<p>erstmal danke für die vielen Antworten <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="🙂"
    /></p>
<p>gedächtnislücke schrieb:</p>
<blockquote>
<p>Ich wiederhohle: Warum</p>
<pre><code class="language-cpp">leg* m_bein[6];
</code></pre>
<p>und nicht</p>
<pre><code class="language-cpp">leg m_bein[6];
</code></pre>
<p>?</p>
</blockquote>
<p>Wie soll ich <strong>leg m_bein</strong> inizialisieren? Wie rufe ich dann im Konstruktor von Hexapod den Konstruktor von leg auf?</p>
<p>Xebov schrieb:</p>
<blockquote>
<p>Warum hälst du soviele Daten als Zeiger und nicht als normale Variable zB:</p>
<pre><code>leg*                m_bein[6];
D3DXVECTOR3*        m_CamPos;
</code></pre>
</blockquote>
<p>naja weil dies Daten sind die diesem Objekt nicht gehören, sie aber darauf zugreifen müssen. m_CamPos ist ein D3DXVECTOR3 eines anderen Objekts, der aber von Leg benötigt wird. und damit leg immer den aktuellen vektor hat bekommt leg eben einen Pointer zum Originalvektor. Alternativ müsste Leg einen Pointer zum Objekt View_Light bekommen um mit get sich den vektor immer zu holen. die Variante find ich aber doof weil ich zu viele Kreisschlüsse bekomme was Pointertausch meiner Objekte angeht...</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Was ist mit campos?</p>
</blockquote>
<p>Wie gesagt CamPos ist ein Pointer auf die Richtige CamPos. Wird auch im Konstruktor übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271363</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 08:58:59 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 09:17:29 GMT]]></title><description><![CDATA[<p>Ich sehe keinen <code>operator=()</code> oder Kopier-K'tor.<br />
Erfahrungsgemäß brauchst Du die aber, wenn Du mit Pointern hantierst...(&quot;Rule of three&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271372</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 16 Nov 2012 09:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 09:31:02 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Erfahrungsgemäß brauchst Du die aber, wenn Du mit Pointern hantierst...(&quot;Rule of three&quot;)</p>
</blockquote>
<p>jein. Das gilt nur dann, wenn man Pointer selbst erzeugt. Teilweise scheinen hier Pointer auf extern erstellte Objekte gehalten zu werden. Bei diesen Pointern reicht es, die Adresse zu kopieren.</p>
<p>Da aber m_bein im Objekt erzeugt wird, sind die erwähnten Methoden notwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271375</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 16 Nov 2012 09:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 11:04:55 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Erfahrungsgemäß brauchst Du die aber, wenn Du mit Pointern hantierst...(&quot;Rule of three&quot;)</p>
</blockquote>
<p>jein. Das gilt nur dann, wenn man Pointer selbst erzeugt.</p>
</blockquote>
<p>Nicht einmal unbedingt dann. Wenn man intelligente Smart-Pointer mit Kopiersemantik hat, kann man sich auch die Big Three sparen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271408</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 16 Nov 2012 11:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 13:09:07 GMT]]></title><description><![CDATA[<p>ok ich ich glaube ich hab verstanden was ihr damit meint, bzw wo das Problem liegt.<br />
Aber ich weiß noch nicht so recht ob ich das jetzt richtig gemacht habe. für Hexapod hab ich jetzt keinen CopyK. und keinen Operator hinzugefügt da Hexapod einzigartig bleibt. Für aber Leg schon.<br />
Ich stell mich grade nur etwas an, und weiß nicht wie ich den Copyoperator jetzt richtig nutze, um m_bein in Hexapod richtig zu erstellen.<br />
Ich habs jetzt ohne pointer versucht, aber jetzt bekomm ich folgende meldung im Konstruktor von Hexapod:</p>
<pre><code>für die Klasse &quot;leg&quot; ist kein standard Konstruktor vorhanden
</code></pre>
<p><strong>Hexapod .h und .cpp</strong></p>
<pre><code>#ifndef HEXAPOD_H_CL90
#define HEXAPOD_H_CL90

#include &quot;init_configuration.h&quot;
#include &quot;leg.h&quot;

class Hexapod
{
	public:
		Hexapod(D3DXVECTOR3* CamPos);
		~Hexapod();

		leg*				get_leg(int number);

	private:

		leg				m_bein[6];

		D3DXVECTOR3*		m_CamPos;
};

#endif
</code></pre>
<pre><code>#include &quot;hexapod.h&quot;

Hexapod :: Hexapod(D3DXVECTOR3* CamPos)
{
	m_CamPos	= CamPos;

	unsigned int i;
	for(i = 0; i &lt; 6; i++)
	{
		//m_bein[i] = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
		m_bein[i] = leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
	}
}
Hexapod :: ~Hexapod()
{
	unsigned int i;
	//for(i = 0; i &lt; 6; i++)	delete m_bein[i];
	delete[] m_bein;
}
</code></pre>
<p><strong>Änderungen in Leg .h .cpp</strong></p>
<pre><code>#ifndef LEG_H_CL90
#define LEG_H_CL90

#include &quot;init_configuration.h&quot;
#include &quot;iKin_math.h&quot;

class leg
{
	public:
		leg(D3DXVECTOR3* CamPos, float x, float y, float z,  float degAngel);
		leg(const leg&amp; other);
		~leg();
		leg&amp; operator = (const leg&amp; other);
		...
</code></pre>
<pre><code>#include &quot;leg.h&quot;

float leg::m_PI			= 3.141592f;
float leg::m_length[4]	= {3.29f,	1.5f,	6.78f, 8.07f};

leg :: leg(D3DXVECTOR3* CamPos, float x, float y, float z,  float degAngel)
{
	...
}

leg :: leg(const leg&amp; other)
{

}
leg ::~leg()
{
	delete m_iKin;
}
leg&amp; leg :: operator = (const leg&amp; other)
{
	int i;
	m_iKin			= other.m_iKin;
	for(i = 0; i &lt; 4; i++)	m_angle[i]			= other.m_angle[i];
	for(i = 0; i &lt; 6; i++)	m_matTransform[i]	= other.m_matTransform[i];
	for(i = 0; i &lt; 5; i++)	m_posVec[i]			= other.m_posVec[i];
	//for(i = 0; i &lt; 5; i++)	m_length[4]			= other.m_length[4];
	m_Origin		= other.m_Origin;
	m_Target		= other.m_Target;
	m_matRot90		= other.m_matRot90;
	m_matTurn		= other.m_matTurn;
	m_matDir		= other.m_matDir;
	m_matSize		= other.m_matSize;
	m_matAxisSize	= other.m_matAxisSize;
	m_matTransPos	= other.m_matTransPos;
	m_matTransSO	= other.m_matTransSO;
	m_matTransVS	= other.m_matTransVS;
	m_matTransOS	= other.m_matTransOS;
	m_matTransUS	= other.m_matTransUS;

	m_CamPos		= other.m_CamPos;
	return *this;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271455</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 13:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 13:28:54 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>ich lasse mir durch <strong>_CrtDumpMemoryLeaks();</strong> meine Leeks anzeigen.</p>
</blockquote>
<p>leak = Leck / undichte Stelle<br />
leek = Lauch / Porree</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271458</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Fri, 16 Nov 2012 13:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 13:31:43 GMT]]></title><description><![CDATA[<p>DirkB schrieb:</p>
<blockquote>
<p>cl90 schrieb:</p>
<blockquote>
<p>ich lasse mir durch <strong>_CrtDumpMemoryLeaks();</strong> meine Leeks anzeigen.</p>
</blockquote>
<p>leak = Leck / undichte Stelle<br />
leek = Lauch / Porree</p>
</blockquote>
<p>danke <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271459</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 13:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 14:53:41 GMT]]></title><description><![CDATA[<p>Dir scheinen Grundsätzlich noch ein paar Grundkenntnisse zu fehlen. Ein standard Konstruktor ist ein Konstruktor der keine Argumente benötigt weil er entweder keine Argumente nimmt oder alle Argumente mit default Werten belegt sind.</p>
<p>Füe leg bedeutet das entweder:</p>
<pre><code>leg(D3DXVECTOR3* CamPos = nullptr, float x = 0.0f, float y = 0.0f, float z = 0.0f,  float degAngel = 0.0f)
</code></pre>
<p>oder</p>
<pre><code>leg()
</code></pre>
<p>Außerdem muß das delete[] aus dem Destruktor von Hexapod weg.</p>
<p>Wenn du willst das Hexapod einzigartig bleibt würde ich dir empfehlen den Copy Konstruktor und den Copy Operator ins private zu setzen oder als delete zu markieren (falls dein Compiler das schon kann). Beim Move Construktor und Move Operator kannst dus dir ja überlegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271478</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Fri, 16 Nov 2012 14:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 14:59:17 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>Dir scheinen Grundsätzlich noch ein paar Grundkenntnisse zu fehlen.</p>
</blockquote>
<p>Seh ich genauso. Für mich heisst das:</p>
<pre><code class="language-cpp">std::vector&lt;bein&gt; m_bein;
</code></pre>
<p>Konstruktoren mit nichtssagenden (und im Fall von campos auch ungültigen) Defaultwerten zu belegen halte ich für wenig sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271481</guid><dc:creator><![CDATA[thbadr]]></dc:creator><pubDate>Fri, 16 Nov 2012 14:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 15:15:32 GMT]]></title><description><![CDATA[<p>thbadr schrieb:</p>
<blockquote>
<p>Für mich heisst das:</p>
<pre><code class="language-cpp">std::vector&lt;bein&gt; m_bein;
</code></pre>
<p>Konstruktoren mit nichtssagenden (und im Fall von campos auch ungültigen) Defaultwerten zu belegen halte ich für wenig sinnvoll.</p>
</blockquote>
<p>Ich stimme dir da absolut zu. Die 2 Beispiele dienten nur zu Illustrierung was sein Fehler bedeutet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271486</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Fri, 16 Nov 2012 15:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 16:10:29 GMT]]></title><description><![CDATA[<p>Es sind eindeutig Grundlagenprobleme.<br />
In der Uni wurd uns sowas nur in spärlichster Form beigebracht. Da ging es nur um Algorythmen und Datenstrukturen. Für die ganzen sachen wie STL und Classes gabs 2 Vorlesungen zur einführung. Dementsprechend ist es da bei mir auch sehr dünn.<br />
Ich mache dieses Projekt a) weil ich meine Grundkenntnisse verbesseren will, aber Vorallem weil dahinter ein komplexes Projekt steht das mich sehr interessiert.</p>
<p>Welchen Vorteil hat es m_bein in einen Vektor zu schreiben? Ich will ihn weder sortieren noch etwas nachträglich daran ändern.</p>
<p>warum braucht leg einen standard konstruktor? rufe ich nicht immer meine eigenen auf?</p>
<p>zum erstellen von Leg in Hexapod:<br />
Wenn ich in meinem .h file stehen habe: <strong>leg m_bein[6];</strong> und angenommen mein Konrstuktor ist leer. wird beim erstellen meines Objektes Hexapod 6 mal sizeof leg im speicher reserviert? gleiche frage zu <strong>leg</strong>*.</p>
<p>Was genau passiert wenn ich folgende zeile nutze:</p>
<pre><code>leg* m_bein;
m_bein = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
</code></pre>
<p>gebe ich damit meinem pointer m_bein nicht einfach einen Pointer auf ein gerade erzeugtes objekt leg? warum funktioniert das delete dann nicht?</p>
<p>Warum muss ich den Koppierkonstruktor erstellen, wenn ich eigentlich nur den Zuweisungsoperator in folgendem fall nutze:</p>
<pre><code>leg m_bein;
m_bein = leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
</code></pre>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19909">@Xebov</a></strong> Danke für die tipps mit Hexapod. Ich werde das dann private setzen. ist einfach schöner denke ich. Derzeitig Programmiere ich noch ganz alleine an dem Programm, daher musste ich mir noch nicht so viele gedanken machen was man wie falsch nutzen könnte. Diese Denke muss ich mir noch angewöhnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271501</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 16:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 17:10:15 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Welchen Vorteil hat es m_bein in einen Vektor zu schreiben? Ich will ihn weder sortieren noch etwas nachträglich daran ändern.</p>
</blockquote>
<p>Die Meinung gefällt mir. Ich gebe zu, ein Vektor hat hier etwas Overhead. Das optimalste ist hier ein statisches Array von Beinen (lässt sich aber nicht ganz trivial befüllen).</p>
<p>Aber der Overhead von vector hält sich in Grenzen und ist kleiner als bei deinem Pointer-Array. Denn der Vorteil ist, dass du keinen Standardkonstruktor von leg benötigst:</p>
<pre><code class="language-cpp">class Hexapod {
public:
    Hexapod(D3DXVECTOR3* CamPos)
      : m_CamPos(CamPos),
        m_bein(6, leg(CamPos, 0.0f, 0.0f, 0.0f, 0.0f)) {}

    leg&amp; get_leg(int number) { return m_bein[number]; }

private:
    std::vector&lt;leg&gt; m_bein;
    D3DXVECTOR3*     m_CamPos;
};
</code></pre>
<p>Und das beste: Die Klasse ist so vollständig. Du brauchst keinen Destruktor und keinen operator=, weil das vector für dich erledigt. Und weil die Funktionen so simpel sind, kann man sie auch gleich im Header definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271520</guid><dc:creator><![CDATA[thbadr]]></dc:creator><pubDate>Fri, 16 Nov 2012 17:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Fri, 16 Nov 2012 18:31:13 GMT]]></title><description><![CDATA[<p>oh das ist tatsächlich ziemlich cool.<br />
ich wusste nicht das vector so viel macht. Haben die anderen STL elemente auch so coole eigenschaften?</p>
<p>ich muss das mit dem vektor erstmal ausprobieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271547</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 16 Nov 2012 18:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleaks on Sat, 17 Nov 2012 00:29:06 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>warum braucht leg einen standard konstruktor? rufe ich nicht immer meine eigenen auf?</p>
</blockquote>
<p>Sobald du einen eigenen Konstruktor einbaust bekommst du den standard Konstruktor nichtmehr automatisch. Deswegen ja auch deine Fehlermeldung.</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>zum erstellen von Leg in Hexapod:<br />
Wenn ich in meinem .h file stehen habe: <strong>leg m_bein[6];</strong> und angenommen mein Konrstuktor ist leer. wird beim erstellen meines Objektes Hexapod 6 mal sizeof leg im speicher reserviert?</p>
</blockquote>
<p>Nicht direkt. Es wird erstmald er Speicher für das Array geholt und dann wird auf jedes Element der Konstruktor ausgeführt, selbst dann wenn der Körper leer ist und er eigentlich nichts offensichtliches macht. Vorm Eintritt in den Körper des Konstruktors werden die Member initialisiert, sind es Klassen wird zB deren Konstruktor aufgerufen. Es bildet sich ne Kette die Quasi erstmal alles initalisiert.</p>
<p>cl90 schrieb:</p>
<blockquote>
<pre><code>leg* m_bein;
m_bein = new leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
</code></pre>
<p>gebe ich damit meinem pointer m_bein nicht einfach einen Pointer auf ein gerade erzeugtes objekt leg? warum funktioniert das delete dann nicht?</p>
</blockquote>
<p>delete funktioniert an dieser Stelle,d as muß es ja auch. Mein Kommentar bezog sich darauf das du versucht hast ein statisches Array mit delete[] zu löschen, was natürlich nicht geht.</p>
<p>[quote=&quot;cl90&quot;]<br />
Warum muss ich den Koppierkonstruktor erstellen, wenn ich eigentlich nur den Zuweisungsoperator in folgendem fall nutze:</p>
<pre><code>leg m_bein;
m_bein = leg(m_CamPos, 0.0f, 0.0f, 0.0f, 0.0f);
</code></pre>
<p>Kopierkonstruktoren und Kopieroperatoren gehen imemr Hand in Hand, hat man das eine benötigt man oft auch das andere. thbadr's Beispiel braucht zb einen CopyKonstruktor.</p>
<p>Die Lösung mit dem wenigsten Overkill wäre meiner Meinung nach die</p>
<pre><code>SmartPointer&lt;leg&gt; m_beine[6];
</code></pre>
<p>Dort müsste man zwar im Konstruktor selbst tätig werden, dafür hat man aber die selben Annehmlichkeiten wie beim std::vector.</p>
<p>Noch etwas zu den Pointern die du rumreichst. Wenn du soetwas tust musst du vom Design her garantieren können das der Besitzer des Speicherbereichs erst zerstört wird nachdem alle die den Speicherbereich nutzen zerstört wurden, sonst krachts irgendwann richtig böse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271634</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sat, 17 Nov 2012 00:29:06 GMT</pubDate></item></channel></rss>