<?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[Pointer löschen oder nicht ?!]]></title><description><![CDATA[<p>Ich möchte einen Fussball manager schreiben und habe dafür eine readin funktion, die daten aus einer txt.datei einließt. Die Datei sieht ungefähr so aus:</p>
<pre><code>Liga: 1.Bundesliga

Verein: Hamburger SV

Rene Adler 12
Rafael vanderVaart 7

Verein: Eintracht Braunschweig

Soeren Grahns 2
Karim Bellarabi 10
</code></pre>
<p>und meine Readinfunction so :</p>
<pre><code>#include &quot;ReadIn.h&quot;
#include &quot;Player.h&quot;
#include &lt;deque&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;memory&gt;
#include &lt;iostream&gt;

std::string zeile,word1, word2, sname, lname;
std::deque&lt;Team*&gt; Teamvector;
int str, a = 0, b = 0 , c = 0;

void readin_fillVector(std::deque&lt;Team&gt; &amp;v, std::deque&lt;League&gt; &amp; w, std::vector&lt;Player&gt; u) {
	ifstream fin(&quot;C:\\Users\\david\\Documents\\Visual Studio 2013\\Projects\\Anstoss2014\\Datenbank\\test.txt&quot;);

	//Einlesen der Zeilen starten
	while (getline(fin, zeile))
	{

		fin &gt;&gt; word1;
		//find out if this line contains the team name or the players
		if (word1 == &quot;Liga:&quot;){
			getline(fin, word2);
			//deleting the empty space in front of the team name
			word2.erase(0, 1);
			w.push_back(League(word2, c));
			c++;
		}
		else if (word1 == &quot;Verein:&quot;){
			getline(fin, word2);
			//deleting the empty space in front of the team name
			word2.erase(0, 1);
			v.push_back(Team(word2, a));

			//League gets the new member ( the team which was read in the line before)
			w.back().AddTeam(&amp;v.back());
			//Team gets an pointer to the league it plays in
			v.back().SetLeague(&amp;w.back());
			a++;
		}
		else{
			fin &gt;&gt; lname &gt;&gt; str;
			Player* player = new Player();
			player-&gt;setinformation_(b, word1, lname, str, &amp;v.back());
			u.push_back(*player);
			v.back().AddPlayer(player);

			b++;

		}

	}

}
</code></pre>
<p>Die Frage ist nun:<br />
Eigentlich muss ich wegen dem new() den erstellten Pointer auf die Spieler klasse ja löschen.<br />
Aber tue ich dass, sind beim Auslesen alle Informationen über den Spieler, der im Teamvektor des Teams gespeichert ist, verloren.<br />
Wie ich kann ich das umgehen ?</p>
<p>Und macht das Design so grundsätzlich überhaupt Sinn ?<br />
Es funktioniert jedenfalls so wie es soll bisher, nur dass eben die Pointer nicht gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324396/pointer-löschen-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 01:40:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324396.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Mar 2014 18:14:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer löschen oder nicht ?! on Sat, 15 Mar 2014 18:15:18 GMT]]></title><description><![CDATA[<p>Ich möchte einen Fussball manager schreiben und habe dafür eine readin funktion, die daten aus einer txt.datei einließt. Die Datei sieht ungefähr so aus:</p>
<pre><code>Liga: 1.Bundesliga

Verein: Hamburger SV

Rene Adler 12
Rafael vanderVaart 7

Verein: Eintracht Braunschweig

Soeren Grahns 2
Karim Bellarabi 10
</code></pre>
<p>und meine Readinfunction so :</p>
<pre><code>#include &quot;ReadIn.h&quot;
#include &quot;Player.h&quot;
#include &lt;deque&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;memory&gt;
#include &lt;iostream&gt;

std::string zeile,word1, word2, sname, lname;
std::deque&lt;Team*&gt; Teamvector;
int str, a = 0, b = 0 , c = 0;

void readin_fillVector(std::deque&lt;Team&gt; &amp;v, std::deque&lt;League&gt; &amp; w, std::vector&lt;Player&gt; u) {
	ifstream fin(&quot;C:\\Users\\david\\Documents\\Visual Studio 2013\\Projects\\Anstoss2014\\Datenbank\\test.txt&quot;);

	//Einlesen der Zeilen starten
	while (getline(fin, zeile))
	{

		fin &gt;&gt; word1;
		//find out if this line contains the team name or the players
		if (word1 == &quot;Liga:&quot;){
			getline(fin, word2);
			//deleting the empty space in front of the team name
			word2.erase(0, 1);
			w.push_back(League(word2, c));
			c++;
		}
		else if (word1 == &quot;Verein:&quot;){
			getline(fin, word2);
			//deleting the empty space in front of the team name
			word2.erase(0, 1);
			v.push_back(Team(word2, a));

			//League gets the new member ( the team which was read in the line before)
			w.back().AddTeam(&amp;v.back());
			//Team gets an pointer to the league it plays in
			v.back().SetLeague(&amp;w.back());
			a++;
		}
		else{
			fin &gt;&gt; lname &gt;&gt; str;
			Player* player = new Player();
			player-&gt;setinformation_(b, word1, lname, str, &amp;v.back());
			u.push_back(*player);
			v.back().AddPlayer(player);

			b++;

		}

	}

}
</code></pre>
<p>Die Frage ist nun:<br />
Eigentlich muss ich wegen dem new() den erstellten Pointer auf die Spieler klasse ja löschen.<br />
Aber tue ich dass, sind beim Auslesen alle Informationen über den Spieler, der im Teamvektor des Teams gespeichert ist, verloren.<br />
Wie ich kann ich das umgehen ?</p>
<p>Und macht das Design so grundsätzlich überhaupt Sinn ?<br />
Es funktioniert jedenfalls so wie es soll bisher, nur dass eben die Pointer nicht gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389090</guid><dc:creator><![CDATA[jimbo999]]></dc:creator><pubDate>Sat, 15 Mar 2014 18:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer löschen oder nicht ?! on Sat, 15 Mar 2014 18:22:57 GMT]]></title><description><![CDATA[<p>Du solltest an geeigneter Stelle den Speicher wieder freigeben, nämlich wenn die Zeiger aus dem vector verschwinden. Normalerweise umgeht man das, indem man einfach statt Player * direkt Player speichert, dann hat man kein new und braucht kein delete. Wenn es dann unbedingt sein muss, dann nimmt man unique_ptr, der ruft automatisch delete auf wenn er verschwindet:</p>
<pre><code>void readin_fillVector(std::vector&lt;std::unique_ptr&lt;Player&gt;&gt; u){
    auto player = std::make_unique&lt;Player&gt;();
    player-&gt;setinformation_(b, word1, lname, str, &amp;v.back());
    u.push_back(std::move(player));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2389092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389092</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sat, 15 Mar 2014 18:22:57 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer löschen oder nicht ?! on Sat, 15 Mar 2014 18:26:08 GMT]]></title><description><![CDATA[<p>jimbo999 schrieb:</p>
<blockquote>
<p>Eigentlich muss ich wegen dem new() den erstellten Pointer auf die Spieler klasse ja löschen.<br />
Aber tue ich dass, sind beim Auslesen alle Informationen über den Spieler, der im Teamvektor des Teams gespeichert ist, verloren.<br />
Wie ich kann ich das umgehen ?</p>
</blockquote>
<p>Du löschst ihn dann, wenn er nicht mehr gebraucht wird, und nicht schon vorher.</p>
<p>Das müsste vermutlich im Destruktor von Team sein.</p>
<p>Kleine Anmerkung: Dein Sprachgebrauch deckt hier vermutlich deinen Denkfehler auf. Es werden nämlich keine Pointer gelöscht, der Pointer ist danach immer noch gesund und munter. Das was gelöscht wird ist das Objekt, auf das der Pointer zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389094</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 15 Mar 2014 18:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer löschen oder nicht ?! on Sun, 16 Mar 2014 16:24:54 GMT]]></title><description><![CDATA[<p>Danke sehr, überlege mir das nun alles zu umgehen und alles über die TeamIDs und PlayerIDs zu machen, die ja auch einen direkten Zugang der einzelnen Klassen zueiander ermöglichen. Die pointer verwirren mich nur zu sehr <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/2389227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389227</guid><dc:creator><![CDATA[jimbo999]]></dc:creator><pubDate>Sun, 16 Mar 2014 16:24:54 GMT</pubDate></item></channel></rss>