<?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[Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben]]></title><description><![CDATA[<p>Hi,</p>
<p>ich stoße auf ein etwas seltsames Verhalten.<br />
Und zwar scheint die Zuweisung über den &quot;=&quot;-Operator nur teilweise zu funktionieren.</p>
<p>Was ich habe:</p>
<pre><code class="language-cpp">struct vec2
{
	float x;
	float y;
	inline vec2( ) : x(0.0f), y(0.0f) { };
	inline vec2(float px, float py) : x(px), y(py) { };
}
</code></pre>
<pre><code class="language-cpp">class BendedLine
{
public:
    BendedLine()
    {
        m_numPoints = 0;
        m_pPoints = 0;
    }

    BendedLine(int numPoints, vec2* pPoints)
    {
        m_numPoints = numPoints;
        m_pPoints = pPoints;
    }

    ~BendedLine()
    {
        delete[] m_pPoints;
    }

    inline BendedLine operator=(BendedLine&amp; rhs)
    {
        std::cout&lt;&lt;&quot;=Operator: &quot;;
        m_numPoints = rhs.m_numPoints;
        delete m_pPoints;
        m_pPoints = new vec2[m_numPoints];
        for(int i = 0; i &lt; m_numPoints; i++)
        {
            m_pPoints[i] = vec2(rhs.m_pPoints[i].x, rhs.m_pPoints[i].y);
            std::cout&lt;&lt;m_pPoints[i].x &lt;&lt; &quot; / &quot; &lt;&lt;m_pPoints[i].y &lt;&lt; &quot;, &quot;;
        }
        std::cout&lt;&lt;&quot;\n&quot;;
        return *this;
    }

    inline const int numPoints() const
    {
        return m_numPoints;
    }

    inline const vec2 get(int i) const
    {
        return m_pPoints[i];
    }

private:
    int m_numPoints;
    vec2* m_pPoints;
};
</code></pre>
<p>Soo, das ganze benutze ich nun:</p>
<pre><code class="language-cpp">vec2* point = new vec2[3];
point[0] = vec2(1,1);
point[1] = vec2 (2,2);
point[2] = vec2(3,3);
BendedLine l1(3, point);
BendedLine l2;
l2 = l1;
printLine(l1);
printLine(l2);
</code></pre>
<p>Als Ausgabe erhalte ich:<br />
=Operator: 1,1 / 2,2 / 3,3<br />
l1: 1,1 / 2,2 / 3,3<br />
l2: x,y / 2,2 / 3,3</p>
<p>Wobei x,y hier scheinbar zufällige, jedoch immer sehr kleine Zahlen sind.<br />
(Z.B. 1.8013e-38)</p>
<p>Wieso verhaut es mir die? Und wieso immer nur den ersten Vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290406/dynamischer-array-quot-quot-operator-überschreiben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 08:39:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290406.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Jul 2011 07:11:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben on Tue, 26 Jul 2011 07:11:15 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich stoße auf ein etwas seltsames Verhalten.<br />
Und zwar scheint die Zuweisung über den &quot;=&quot;-Operator nur teilweise zu funktionieren.</p>
<p>Was ich habe:</p>
<pre><code class="language-cpp">struct vec2
{
	float x;
	float y;
	inline vec2( ) : x(0.0f), y(0.0f) { };
	inline vec2(float px, float py) : x(px), y(py) { };
}
</code></pre>
<pre><code class="language-cpp">class BendedLine
{
public:
    BendedLine()
    {
        m_numPoints = 0;
        m_pPoints = 0;
    }

    BendedLine(int numPoints, vec2* pPoints)
    {
        m_numPoints = numPoints;
        m_pPoints = pPoints;
    }

    ~BendedLine()
    {
        delete[] m_pPoints;
    }

    inline BendedLine operator=(BendedLine&amp; rhs)
    {
        std::cout&lt;&lt;&quot;=Operator: &quot;;
        m_numPoints = rhs.m_numPoints;
        delete m_pPoints;
        m_pPoints = new vec2[m_numPoints];
        for(int i = 0; i &lt; m_numPoints; i++)
        {
            m_pPoints[i] = vec2(rhs.m_pPoints[i].x, rhs.m_pPoints[i].y);
            std::cout&lt;&lt;m_pPoints[i].x &lt;&lt; &quot; / &quot; &lt;&lt;m_pPoints[i].y &lt;&lt; &quot;, &quot;;
        }
        std::cout&lt;&lt;&quot;\n&quot;;
        return *this;
    }

    inline const int numPoints() const
    {
        return m_numPoints;
    }

    inline const vec2 get(int i) const
    {
        return m_pPoints[i];
    }

private:
    int m_numPoints;
    vec2* m_pPoints;
};
</code></pre>
<p>Soo, das ganze benutze ich nun:</p>
<pre><code class="language-cpp">vec2* point = new vec2[3];
point[0] = vec2(1,1);
point[1] = vec2 (2,2);
point[2] = vec2(3,3);
BendedLine l1(3, point);
BendedLine l2;
l2 = l1;
printLine(l1);
printLine(l2);
</code></pre>
<p>Als Ausgabe erhalte ich:<br />
=Operator: 1,1 / 2,2 / 3,3<br />
l1: 1,1 / 2,2 / 3,3<br />
l2: x,y / 2,2 / 3,3</p>
<p>Wobei x,y hier scheinbar zufällige, jedoch immer sehr kleine Zahlen sind.<br />
(Z.B. 1.8013e-38)</p>
<p>Wieso verhaut es mir die? Und wieso immer nur den ersten Vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097858</guid><dc:creator><![CDATA[Mathews]]></dc:creator><pubDate>Tue, 26 Jul 2011 07:11:15 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben on Tue, 26 Jul 2011 07:20:13 GMT]]></title><description><![CDATA[<p>Hi, mir ist gerade aufgefallen:<br />
In dem &quot;=&quot;-Operator muss es natürlich:<br />
delete[] m_pPoints;<br />
heißen.<br />
Ändert an der Problematik aber nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097860</guid><dc:creator><![CDATA[Mathews]]></dc:creator><pubDate>Tue, 26 Jul 2011 07:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben on Tue, 26 Jul 2011 07:28:51 GMT]]></title><description><![CDATA[<p>also auffällig ist das auch aus meiner sicht nicht.</p>
<p>zeig mal printLine...</p>
<p>du kannst in zeile 29 genauso gut schreiben:<br />
m_pPoints[i] = rhs.m_pPoints[i];</p>
<p>da du ja den vector kopierst</p>
<p>und übergib deine rhs als const&amp;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097861</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 26 Jul 2011 07:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben on Tue, 26 Jul 2011 08:31:32 GMT]]></title><description><![CDATA[<p>@off topic:<br />
Wirf die dynamische Speicherverwaltung raus und nimm statt dessen std::vector. Damit löst du dein Problem sofort, dafür möchte ich wetten.</p>
<p>@on topic:<br />
Der Zuweisungsoperator sieht erstmal gut aus, aber der Kopierkonstruktor fehlt. Nicht, dass du print per-value aufrufst und ein temporäres Objekt dir deinen Speicher wieder freigibt, ohne dass du es merkst.</p>
<p>PS:<br />
Gebogen heißt bent, nicht bended</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097876</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 26 Jul 2011 08:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamischer Array &amp;quot;=&amp;quot;-Operator überschreiben on Tue, 26 Jul 2011 09:05:31 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Der Zuweisungsoperator sieht erstmal gut aus,</p>
</blockquote>
<p>Er verkraftet keine Selbstzuweisung.</p>
<p>Und sonst kann ich sagen: Verletzung der <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">3er-Regel</a> (wurde aber schon genannt).</p>
<p>Und noch ein +1 für std::vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097887</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 26 Jul 2011 09:05:31 GMT</pubDate></item></channel></rss>