<?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[Vector aus Zeigern]]></title><description><![CDATA[<p>Hallo erstmal alle zusammen ist ja mein erster Post hier <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>Nach einiger Zeit Abstinenz bin ich wieder zum Programmieren gekommen und stehe bei einer Übungsaufgabe jetzt ein wenig auf dem Schlauch.</p>
<p>Es geht um eine art Auktionssystem.</p>
<p>Die Klassen sind schon vorgegeben und sollen ausprogrammiert werden.</p>
<p>Es gibt die Klassen AuktionsAnwendung, Gebot, Bieter und Auction.<br />
Mein Prob dreht sich um die Klasse AuktionAnwendung:</p>
<pre><code class="language-cpp">AuktionAnwendung.h
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;Auktion.h&quot;
#include &quot;Gebot.h&quot;
#include &quot;Bieter.h&quot;
class AuktionAnwendung {
public:
    AuktionAnwendung();
    AuktionAnwendung(const AuktionAnwendung&amp; orig);
    virtual ~AuktionAnwendung();
    Auktion* erstelleAuktion(std::string name);
    Bieter* erstelleBieter(std::string name);
    Gebot* gebot(Bieter*bieter,Auktion*auktion, float preis);
    Gebot* getLetztesGebot(Auktion*auktion);
private:
    std::vector &lt;Auktion*&gt; auktionen_;
    std::vector &lt;Bieter*&gt; bieter_;
    std::vector &lt;Gebot*&gt; gebote_;
 };
</code></pre>
<p>Meine Implementierung sieht so aus:</p>
<pre><code class="language-cpp">Auktion* AuktionAnwendung::erstelleAuktion(std::string name)
{
    Auktion* auktion = new Auktion(name);
    auktionen_.push_back(auktion);
    return auktion;
}
Bieter* AuktionAnwendung::erstelleBieter(std::string name)
{
    Bieter* bieter= new Bieter(name);
    bieter_.push_back(bieter);
    return bieter;
}
Gebot* AuktionAnwendung::Gebot(Bieter* bieter, Auktion* auktion, float preis)
{
    Gebot* gebot = new Gebot(bieter,auktion,preis);
    gebote_.push_back(gebot);
    return gebot;
</code></pre>
<p>Nun hänge ich bei der Funktion getLetztesGebot.<br />
Als Parameter wird ein Zeiger auf die Auktion übergeben. Dazu brauche ich dann das letzte Gebot und den Bieter. Diese stecken ja in meinem Vector gebote_. Nur stehe ich gerade auf dem Schlauch wie ich zu der Auktion das letzte Gebot bekommen kann.</p>
<p>Ich muss doch den Vector gebote_ durchlaufen und schauen wo diese Auktion drinsteckt und davon das letzte Gebot zurückgeben ???</p>
<p>Ihr merkt ich bin verwirrt <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/309225/vector-aus-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 12:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309225.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Oct 2012 14:26:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 14:26:01 GMT]]></title><description><![CDATA[<p>Hallo erstmal alle zusammen ist ja mein erster Post hier <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>Nach einiger Zeit Abstinenz bin ich wieder zum Programmieren gekommen und stehe bei einer Übungsaufgabe jetzt ein wenig auf dem Schlauch.</p>
<p>Es geht um eine art Auktionssystem.</p>
<p>Die Klassen sind schon vorgegeben und sollen ausprogrammiert werden.</p>
<p>Es gibt die Klassen AuktionsAnwendung, Gebot, Bieter und Auction.<br />
Mein Prob dreht sich um die Klasse AuktionAnwendung:</p>
<pre><code class="language-cpp">AuktionAnwendung.h
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;Auktion.h&quot;
#include &quot;Gebot.h&quot;
#include &quot;Bieter.h&quot;
class AuktionAnwendung {
public:
    AuktionAnwendung();
    AuktionAnwendung(const AuktionAnwendung&amp; orig);
    virtual ~AuktionAnwendung();
    Auktion* erstelleAuktion(std::string name);
    Bieter* erstelleBieter(std::string name);
    Gebot* gebot(Bieter*bieter,Auktion*auktion, float preis);
    Gebot* getLetztesGebot(Auktion*auktion);
private:
    std::vector &lt;Auktion*&gt; auktionen_;
    std::vector &lt;Bieter*&gt; bieter_;
    std::vector &lt;Gebot*&gt; gebote_;
 };
</code></pre>
<p>Meine Implementierung sieht so aus:</p>
<pre><code class="language-cpp">Auktion* AuktionAnwendung::erstelleAuktion(std::string name)
{
    Auktion* auktion = new Auktion(name);
    auktionen_.push_back(auktion);
    return auktion;
}
Bieter* AuktionAnwendung::erstelleBieter(std::string name)
{
    Bieter* bieter= new Bieter(name);
    bieter_.push_back(bieter);
    return bieter;
}
Gebot* AuktionAnwendung::Gebot(Bieter* bieter, Auktion* auktion, float preis)
{
    Gebot* gebot = new Gebot(bieter,auktion,preis);
    gebote_.push_back(gebot);
    return gebot;
</code></pre>
<p>Nun hänge ich bei der Funktion getLetztesGebot.<br />
Als Parameter wird ein Zeiger auf die Auktion übergeben. Dazu brauche ich dann das letzte Gebot und den Bieter. Diese stecken ja in meinem Vector gebote_. Nur stehe ich gerade auf dem Schlauch wie ich zu der Auktion das letzte Gebot bekommen kann.</p>
<p>Ich muss doch den Vector gebote_ durchlaufen und schauen wo diese Auktion drinsteckt und davon das letzte Gebot zurückgeben ???</p>
<p>Ihr merkt ich bin verwirrt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2261389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261389</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 14:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 14:53:26 GMT]]></title><description><![CDATA[<p>Ich behaupte mal: Die Benutzung von Pointern ist hier grundsätzlich falsch. Wieso glaubst du, brauchst du sie hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261396</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Oct 2012 14:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 15:05:50 GMT]]></title><description><![CDATA[<p>Um ganz erlich zu sein, weil es die Aufgabenstellung vorgibt. Funktionsheader sind eben schon gegeben.<br />
Ich greife von der Klasse AuktionAnwendung über Zeiger auf die anderen Klassen zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261400</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 15:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 15:17:17 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<p>Um ganz erlich zu sein, weil es die Aufgabenstellung vorgibt. Funktionsheader sind eben schon gegeben.<br />
Ich greife von der Klasse AuktionAnwendung über Zeiger auf die anderen Klassen zu.</p>
</blockquote>
<p>Sag mal genauer, was gegeben ist und was nicht. Wenn das public-Interface der Klasse AuktionAnwendung so gegeben ist, heißt das noch lange nicht, dass du Zeiger benutzen musst oder solltest. Derzeit ist das Design eine Katastrophe. Kein Wunder, wenn daher Schwierigkeiten kommen. Und ich glaube, einige der Schwierigkeiten, die ich hier schon sehe, ahnst du selber noch nicht einmal.</p>
<p>Wenn du schon Vectoren hast, wäre es doch viel naheliegender, mit Indizes zu arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261403</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Oct 2012 15:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 15:30:45 GMT]]></title><description><![CDATA[<p>Ok folgendes ist gegeben: Ein UML Diagramm, mit entprechenden Klassen und beziehungen.<br />
Die AuktionAnwendung.h steht ja schon oben, dazu kommen:</p>
<pre><code class="language-cpp">Bid.h
class Gebot {
public:
    Gebot();
    Gebot(Bieter* bieter, Auktion* auktion, float preis);
    Gebot(const Gebot&amp; orig);
    virtual ~Gebot();
    float getPreis();
    Bieter* getBieter();
    Auktion* getAuktion();
private:
    float preis_;
    Bieter* bieter_;
    Auktion* auktion_;

};
</code></pre>
<pre><code class="language-cpp">Bieter.h
class Bieter {
public:
    Bieter();
    Bieter(std::string name );
    Bieter(const Bieter&amp; orig);
    virtual ~Bieter();
    std::string getName();
private:
    std::string name_;
};
</code></pre>
<pre><code class="language-cpp">Auktion.h

class Auktion {
public:
    Auktion();
    Auktion(std::string name);
    Auktion(const Auktion&amp; orig);
    virtual ~Auktion();
    std::string getName();
private:
    std::string name_;
};
</code></pre>
<p>AuktionAnwendung und die anderen 3 Klassen stehen in einer 1:n Beziehung, daher die Vectoren. Die Klasse Gebot steht mit der Klasse Bieter und der Klasse Auktion in einer n:1 beziehung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261405</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 15:30:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 15:37:01 GMT]]></title><description><![CDATA[<p>Stehen im UML-Diagramm explizit Zeiger?</p>
<p>Edit: Am besten zeigst du mal das Diagramm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261406</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 Oct 2012 15:37:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 17:03:26 GMT]]></title><description><![CDATA[<p>UML Diagramm:<br />
<a href="http://imageshack.us/a/img845/2813/auktionanwendung.jpg" rel="nofollow">http://imageshack.us/a/img845/2813/auktionanwendung.jpg</a></p>
<p>Also habe mein eigentliches Problem mit der Funktion getLetztesGebot(Auktion*auktion) jetzt so gelößt:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot = new Gebot();
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
       }
   }
   return gebot;
}
</code></pre>
<p>Der Code funzt aber ich möchte gerne wissen warum das nicht so &quot;gut&quot; ist, und wo der Designfehler ist.</p>
<p>EDIT und OT: Ist es möglich das Bild direkt anzeigen zu lassen etwa mit [img]?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261421</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 17:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 17:02:01 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<p>UML Diagramm:<br />
<a href="http://imageshack.us/a/img845/2813/auktionanwendung.jpg" rel="nofollow">http://imageshack.us/a/img845/2813/auktionanwendung.jpg</a></p>
</blockquote>
<p>JPEG ist nicht so gut geeignet, scharfe Konturen beizubehalten. Für Schrift ist daher z.B. PNG besser geeignet.</p>
<blockquote>
<p>Also habe mein eigentliches Problem mit der Funktion getLetztesGebot(Auktion*auktion) jetzt so gelößt:</p>
<pre><code class="language-cpp">Bid* gebot = new Bid();
   for (int i=0;i&lt;bid_.size();i++)
   {
       if (bid_.at(i)-&gt;getAuction()==auction)
       {
           gebot=bid_.at(i);
       }
   }
   return gebot;
</code></pre>
<p>Der Code funzt aber ich möchte gerne wissen warum das nicht so &quot;gut&quot; ist, und wo der Designfehler ist.</p>
</blockquote>
<p>Da liegt so einiges im Argen. Die Klasse AuctionApplication ist eine ziemlich monströse Klasse, die sehr viele Aufgaben hat: Auktionen erstellen, Bieter erstellen, einen Bieter bei einer Auktion bieten lassen, die Gebote einer Auktion speichern, das letzte Gebot einer Auktion angeben... Vielleicht hast du schonmal davon gehört, dass eine Klasse nur eine einzelne Aufgabe haben soll. Einen Bieter kann man selbst auf eine Auktion bieten lassen, d.h. die Funktionalität kommt in die Klasse Bieter. Eine Auktion kann selbst speichern, welche Gebote eingegangen sind, das braucht man nicht zentral für alle Auktionen in AuctionApplication zu speichern. Dementsprechend kann eine Auktion selbst die Frage nach dem letzten Gebot beantworten. Wenn man diesen Gedankengang fortsetzt, löst sich die Klasse AuctionApplication entweder in Luft auf oder (je nachdem, was man vorhat und wie die Umgebung aussieht) sie degeneriert zu einer zentralen Speicherstelle aller Auktionen und Bieter (aber nicht der Gebote, die sind in den Auktionen gespeichert).</p>
<p>Dann diese grässlichen Zeiger. Du kannst Objekte direkt im std::vector speichern und musst sie nicht mit new anlegen, um dann einen Zeiger im vector zu speichern. Dann produzierst du auch nicht solche Speicherlecks wie in der zitierten Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261432</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 Oct 2012 17:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 17:19:37 GMT]]></title><description><![CDATA[<p>Danke für die ausführliche Erklärung. Du hast natürlich recht, ich habe schon mal was davon gehört, dass eine Klasse nur eine Aufgabe haben soll. Jedoch war mir der &quot;Coderahmen&quot; hier ja vorgegeben.</p>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Dann produzierst du auch nicht solche Speicherlecks wie in der zitierten Funktion.</p>
</blockquote>
<p>Kannst du mir das mit den Speicherlecks in meiner Funktion genauer erklären? Und kann ich das mit dem vorgegeben Coderahmen anders lösen, so das es nicht zu Speicherlecks kommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261440</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 17:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 19:16:26 GMT]]></title><description><![CDATA[<p>Zu jedem new gehört ein delete. Wo ist das delete für das new aus deiner Funktion? Du brauchst hier gar kein Objekt zu erzeugen, sondern würdest mit einem Nullpointer als Initialisierung gut fahren. Dann passt auch der Fall, dass noch überhaupt kein Gebot auf die Auktion gemacht wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261495</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 Oct 2012 19:16:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Wed, 17 Oct 2012 20:32:24 GMT]]></title><description><![CDATA[<p>Also so:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot =NULL ;
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
       }
   }
   return gebot; 
}
</code></pre>
<p>Wenn ich den Speicher mit delete wieder freigeben will wo müsste ich es dann einfügen? Bin mir da immer unsicher.</p>
<p>Müsste es dann so aussehen:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot =new Gebot();
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
       }
   }
   return gebot; 
delete gebot;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2261521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261521</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Wed, 17 Oct 2012 20:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 13:22:23 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot =new Gebot(); // &lt;- wofür brauchst du ein NEUES Gebot?
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
       }
   }
   return gebot; // &lt;- danach wird die Funktion verlassen.
   delete gebot; // never reached.
}
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2261642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261642</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 18 Oct 2012 13:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 17:42:19 GMT]]></title><description><![CDATA[<p>Das hier kein neues Objekt gebraucht wird ist mir mittlerweile auch klar, nur wollte ich wissen, wenn ich es so machen würde wo ich das delete einfügen muss.</p>
<p>Ich hatte gedacht, dass wenn ich den Speicher vor dem return freigebe es zu problemen kommen kann, da ich ja einen zeiger auf diesen zurückgebe.</p>
<p>Oder müsste ich es rein theoretisch so machen:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot =new Gebot();
   int tmp=0;
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
           tmp=i;
       }
   }
   delete gebot;
return gebote_.at(tmp);

}
</code></pre>
<p>Da fällt mir auf das ich ja die ganze Funtkion auch so schreiben kann oder:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   int tmp=0;
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           tmp=i;
       }
   }
return gebote_.at(tmp);
}
</code></pre>
<p>Ich weiß das es sinnlos ist möchte es aber gerne verstehen, so das ich das nächste mal wenn ich es wirklich brauche das delete richtig einsetzte <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2261758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261758</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Thu, 18 Oct 2012 17:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 18:17:55 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<p>Oder müsste ich es rein theoretisch so machen:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   Gebot* gebot =new Gebot();
   int tmp=0;
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           gebot=gebote_.at(i);
           tmp=i;
       }
   }
   delete gebot;
return gebote_.at(tmp);

}
</code></pre>
</blockquote>
<p>Nein, denn so löschst du das Objekt, das du zurückgibst (bzw. einen Zeiger darauf). Du müsstest im innersten Block prüfen, ob gebot noch auf dein neu erstelltes Objekt zeigt und nur genau denn delete ausführen.</p>
<blockquote>
<p>Da fällt mir auf das ich ja die ganze Funtkion auch so schreiben kann oder:</p>
<pre><code class="language-cpp">Gebot* AuktionAnwendung::getLetztesGebot(Auktion* auktion)
{
   int tmp=0;
   for (int i=0;i&lt;gebote_.size();i++)
   {
       if (gebote_.at(i)-&gt;getAuktion()==auktion)
       {
           tmp=i;
       }
   }
return gebote_.at(tmp);
}
</code></pre>
</blockquote>
<p>Prinzipiell ja, nur ist 0 als Initialisierung nicht günstig, da auch an Position 0 ein Objekt steht. Stell dir vor, es gibt kein Gebot auf die Auktion. Dann wird trotzdem das erste Gebot des vectors zurückgegeben (wenn überhaupt eins existiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261777</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 18 Oct 2012 18:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 19:44:54 GMT]]></title><description><![CDATA[<p>Ah ja wenn es dann jemand sagt (schreibt) klingt es ganz logisch und man denkt sich warum ist man nicht selbst drauf gekommen <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>Vielen Dank für die Hilfe bis jetzt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261810</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Thu, 18 Oct 2012 19:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 20:09:21 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<p>Wenn ich den Speicher mit delete wieder freigeben will wo müsste ich es dann einfügen? Bin mir da immer unsicher.</p>
</blockquote>
<p>Jedesmal wenn mit <code>new</code> Speicher angefordert wird, muss dieser (nach Gebrauch) mit <code>delete</code> wieder freigegeben werden.</p>
<p>Das Problem mit der Aufgabe ist die Asymmetrie.<br />
Benutzt jemand z.B. <code>createAuction()</code> muss diese Person im nachhinein für das <code>delete</code> sorgen, ohne jemals <code>new</code> benutzt zu haben.<br />
Darüberhinaus steht das auch nur in der Dokumentation von <code>createAuction()</code> .</p>
<p>Es gibt wenige Funktionen, die so funktionieren, z.B. POSIXs strdup</p>
<p>man strdup schrieb:</p>
<blockquote>
<p>NAME<br />
strdup, strndup, strdupa, strndupa - duplicate a string</p>
<p>SYNOPSIS<br />
#include &lt;string.h&gt;</p>
<p>char *strdup(const char *s);<br />
[...]<br />
DESCRIPTION<br />
The strdup() function returns a pointer to a new string which is a duplicate of the string s. <strong>Memory for the new string is obtained with malloc(3), and can be freed with free(3)</strong>.</p>
</blockquote>
<p>Wenn man die Dokumentation liest, ist alles klar: der Zeiger der zurückgegeben wird muss ge <code>free</code> d werden. Man muss halt nur daran denken.<br />
Wieder asymmetrisch.<br />
In C, wie z.B. bei <code>strcpy</code> , ist die Lösung, dass der Aufrufer auch den Speicher bereitstellt - d.h. die Symmetrie ist wieder gewährleistet.</p>
<p>C++ bietet mit seinen Objekten und deren Konstruktoren und Operatoren Lösungen an, die viel bequemer und genauso effizient sind.<br />
Die natürliche Implementierung von <code>createAuction()</code> wäre, dass ein Objekt <code>Auction</code> erzeugt und (per Kopie) zurückgegeben wird.</p>
<p>Mit diesem Wissen im Hintergrund mein Vorschlag:<br />
Versuch dich an der Implementierung, wie die Aufgabe es vorsieht. Denk daran, dass der Aufrufer von einigen Funktionen für das freigeben des allozierten Speichers verantwortlich ist und fertig ist der Lack.<br />
Vielleicht ist die Aufgabe eine pädagogische Finte, und im weiteren Verlauf wird darauf eingegangen.</p>
<p>Wenn Du ganz pfiffig bist, schreibst Du alle Pointer betreffenden Funktionen um, so dass Du z.B. <code>unique_ptr</code> verwendest. Dann hast Du wirklich was gelernt...und ein ziemlich praxisnahes Refactoring durchgeführt...</p>
<p>Go for it! <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/2261816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261816</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 18 Oct 2012 20:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Thu, 18 Oct 2012 21:42:46 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Denk daran, dass der Aufrufer von einigen Funktionen für das freigeben des allozierten Speichers verantwortlich ist und fertig ist der Lack.</p>
</blockquote>
<p>Puh wie ganu wird das denn bewergstelligt.</p>
<p>Ich hab dann z.B. folgenden Aufruf</p>
<pre><code class="language-cpp">Auction* auction1=app-&gt;createAuction(&quot;iPhone&quot;);
</code></pre>
<p>muss ich dann einfach wenn auction1 nicht mehr gebraucht wird</p>
<pre><code class="language-cpp">delete auction1
</code></pre>
<p>aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261836</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Thu, 18 Oct 2012 21:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Fri, 19 Oct 2012 07:51:04 GMT]]></title><description><![CDATA[<p>pfandflasche schrieb:</p>
<blockquote>
<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Denk daran, dass der Aufrufer von einigen Funktionen für das freigeben des allozierten Speichers verantwortlich ist und fertig ist der Lack.</p>
</blockquote>
<p>Puh wie ganu wird das denn bewergstelligt.</p>
<p>Ich hab dann z.B. folgenden Aufruf</p>
<pre><code class="language-cpp">Auction* auction1=app-&gt;createAuction(&quot;iPhone&quot;);
</code></pre>
<p>muss ich dann einfach wenn auction1 nicht mehr gebraucht wird</p>
<pre><code class="language-cpp">delete auction1
</code></pre>
<p>aufrufen?</p>
</blockquote>
<p>Ähem...<br />
Ich hab' mir das gerade nochmal angeschaut... <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="🙄"
    /><br />
...und mein Posting von gestern ist für die Tonne...<br />
Der Inhalt ist wohl richtig trifft aber hier nur bedingt zu.</p>
<p>Um Deine Frage zu beantworten: ja.<br />
Allerdings solltest Du, bevor Du die Auktion löscht auch alle Gebote darauf löschen.<br />
Und auch die zugehörigen Einträge aus den Vektoren tilgen...</p>
<p>Memo an mich: nach dem Ratskeller hier nicht mehr posten... <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/2261902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261902</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 19 Oct 2012 07:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Sat, 20 Oct 2012 12:13:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Memo an mich: nach dem Ratskeller hier nicht mehr posten... <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><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=";D"
      alt="😉"
    /> Kann ich mir denken.</p>
<p>Nochmal danke an alle die mir weitergeholfen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262287</guid><dc:creator><![CDATA[pfandflasche]]></dc:creator><pubDate>Sat, 20 Oct 2012 12:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Zeigern on Sat, 20 Oct 2012 13:58:39 GMT]]></title><description><![CDATA[<p>Ich hab's tatsächlich mal implementiert - zu viel Zeit... <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>Prinzipiell ist es sehr einfach. Tatsächlich kommen nämlich nur in Auction_applications Destruktor deletes vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262311</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 20 Oct 2012 13:58:39 GMT</pubDate></item></channel></rss>