<?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[Verschachtelte Objectstrukturen mit Zeigern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin relativ neu bei c++ und befasse mich gerade mit zeigern. Ich habe jetzt eine konzeptionelle frage was objekte und zeiger angeht.</p>
<p>Folgender pseudocode:</p>
<pre><code class="language-cpp">class TestClass
{
	public:
		explicit TestClass();
		virtual ~TestClass();

		void add(TestObject *tobj)
		{
			p_vector.push_back(tobj);
		}

	private:
		std::vector&lt;TestObject*&gt; p_vector;
}

class TestObject
{
	public:
		explicit TestObject(int id) : p_id(id);
		virtual ~TestObject();

	private:
		int p_id;
}

void main(...)
{
	std::vector&lt;TestClass*&gt; m_vec;

	TestClass *tc = NULL;

	//pseudocode - objecte anlegen
	for(i &lt; 5)
	{
		tc = new TestClass();
		tc-&gt;add(new TestObject(1));
		tc-&gt;add(new TestObject(2));
		tc-&gt;add(new TestObject(3));

		m_vec.push_back(tc);
	}

	//pseudocode - objecte löschen
	it = m_vec.begin();
	while(it != m_vec.end())
	{
		it = m_vec.erase(it);
	}
}
</code></pre>
<p>Meine frage ist jetzt, ich erzeuge in der main methode in einer schleife mehrere objecte vom typ TestClass als zeiger, danach erzeuge ich drei objekte vom typ TestObject als zeiger und fülle diese in einen vector in TestClass. Dieses TestClass-objekt fülle ich wiederum in einen vector in main.</p>
<p>1. Ist es richtig, dass die TestObject-objecte weiterleben, wenn ich die TestClass-objekte mit erase lösche?</p>
<p>2. Wenn 1. zutrifft, wo und wie lösche ich dann die TestObject-objekte richtig? Im destruktor von TestClass? Obwohl ich sie nicht dort erzeugt habe?</p>
<p>Danke und Mfg,<br />
Herbert</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305366/verschachtelte-objectstrukturen-mit-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 22:13:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305366.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jun 2012 09:10:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:10:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin relativ neu bei c++ und befasse mich gerade mit zeigern. Ich habe jetzt eine konzeptionelle frage was objekte und zeiger angeht.</p>
<p>Folgender pseudocode:</p>
<pre><code class="language-cpp">class TestClass
{
	public:
		explicit TestClass();
		virtual ~TestClass();

		void add(TestObject *tobj)
		{
			p_vector.push_back(tobj);
		}

	private:
		std::vector&lt;TestObject*&gt; p_vector;
}

class TestObject
{
	public:
		explicit TestObject(int id) : p_id(id);
		virtual ~TestObject();

	private:
		int p_id;
}

void main(...)
{
	std::vector&lt;TestClass*&gt; m_vec;

	TestClass *tc = NULL;

	//pseudocode - objecte anlegen
	for(i &lt; 5)
	{
		tc = new TestClass();
		tc-&gt;add(new TestObject(1));
		tc-&gt;add(new TestObject(2));
		tc-&gt;add(new TestObject(3));

		m_vec.push_back(tc);
	}

	//pseudocode - objecte löschen
	it = m_vec.begin();
	while(it != m_vec.end())
	{
		it = m_vec.erase(it);
	}
}
</code></pre>
<p>Meine frage ist jetzt, ich erzeuge in der main methode in einer schleife mehrere objecte vom typ TestClass als zeiger, danach erzeuge ich drei objekte vom typ TestObject als zeiger und fülle diese in einen vector in TestClass. Dieses TestClass-objekt fülle ich wiederum in einen vector in main.</p>
<p>1. Ist es richtig, dass die TestObject-objecte weiterleben, wenn ich die TestClass-objekte mit erase lösche?</p>
<p>2. Wenn 1. zutrifft, wo und wie lösche ich dann die TestObject-objekte richtig? Im destruktor von TestClass? Obwohl ich sie nicht dort erzeugt habe?</p>
<p>Danke und Mfg,<br />
Herbert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227677</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:10:28 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:21:49 GMT]]></title><description><![CDATA[<p>Die Frage ist doch, warum benutzt Du überhaupt Zeiger? Wenn Du es so machst:</p>
<pre><code class="language-cpp">...
    private:
        std::vector&lt;TestObject&gt; p_vector;
...

    for(i &lt; 5)
    {
        tc TestClass();
        tc-&gt;add(TestObject(1));
        tc-&gt;add(TestObject(2));
        tc-&gt;add(TestObject(3));

...
</code></pre>
<p>kommst Du ohne Zeiger aus und brauchst Dich um irgendwelche Aufräumarbeiten nicht zu kümmern.<br />
Solange es nicht einen besonderen Grund gibt, sollte man das Erzeugen von Objekten mit new / delete vermeiden.</p>
<p>Ansonsten gilt natürlich:<br />
Benutzt Du irgendwo ein new, gehört auch irgendwo ein dazu gehöriges delete hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227682</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:23:55 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>1. Ist es richtig, dass die TestObject-objecte weiterleben, wenn ich die TestClass-objekte mit erase lösche?</p>
</blockquote>
<p>Ja und noch mehr: Auch Dein TestClass-Objekt lebt weiter, denn Du löscht nur den Eintrag im Vector, nicht jedoch das, worauf der Eintrag im Vector zeigt.</p>
<p>HerbertB schrieb:</p>
<blockquote>
<p>2. Wenn 1. zutrifft, wo und wie lösche ich dann die TestObject-objekte richtig? Im destruktor von TestClass? Obwohl ich sie nicht dort erzeugt habe?</p>
</blockquote>
<p>Dein Zweifel an der Richtigkeit, die Objekte im Destruktor zu löschen, ist berechtigt. Es sollte immer der Erzeuger auch derjenige sein, der löscht.</p>
<p>Kurzes Stichwort zu der gesamten Problematik: Smartpointer. Wenn Du statt rohe Zeiger im Vector Smartpointer hälst, werden die bezeigten Objekte gelöscht, sobald der Smartpointer aus dem Vector verschwindet. Ein möglicher Kandidat wäre hier std::unique_ptr oder einer der ptr_container aus boost, die das für Dich machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227683</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:53:28 GMT]]></title><description><![CDATA[<p>Hallo und danke für die antworten!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22666">@Belli</a>: Ja, ist klar, dass ich nicht immer zeiger brauche, aber ich möchte eben die zeiger-dynamik besser verstehen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>:</p>
<p>Zu 1.: erase löscht den eintrag aus dem vector, aber ruft doch auch den destruktor auf?</p>
<p>&quot;This effectively reduces the vector size by the number of elements removed, calling each element's destructor before.&quot;<br />
Quelle: <a href="http://www.cplusplus.com/reference/stl/vector/erase/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/erase/</a></p>
<p>Bezüglich smartpointer, dazu komme ich sicher auch noch, aber momentan würde ich wie gesagt gerne die raw-pointer-dynamik verstehen.</p>
<p>Wie löscht man dann wirklich verschachtelte zeiger objekte, wenn der erzeuger das objekt auch wieder löschen sollte?</p>
<p>Danke und mfg,<br />
Herbert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227687</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:55:39 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>Zu 1.: erase löscht den eintrag aus dem vector, aber ruft doch auch den destruktor auf?</p>
</blockquote>
<p>ja, aber nur den Destruktor vom Zeiger selbst, nicht von dem Object, auf das der Zeiger zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227689</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 09:59:22 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>:</p>
<p>Zu 1.: erase löscht den eintrag aus dem vector, aber ruft doch auch den destruktor auf?</p>
</blockquote>
<p>Völlig richtig, aber das Element ist ein Zeiger. Und der Destruktor eines Zeigers tut garnichts. Es ist etwas anderes, ob Du ein Objekt vom Typ TestClass löscht oder ein Objekt vom Typ TestClass* (Zeiger-auf-TestClass).</p>
<blockquote>
<p>Wie löscht man dann wirklich verschachtelte zeiger objekte, wenn der erzeuger das objekt auch wieder löschen sollte?</p>
</blockquote>
<p>In diesem Fall, wenn Du die Regel &quot;Erzeuger = Löscher&quot; nicht brechen willst, nur mit brachialer Gewalt:</p>
<pre><code class="language-cpp">it = m_vec.begin();
    while(it != m_vec.end()) {
        it2 = it-&gt;p_vector.begin();
        while (it2 != it-&gt;p_vector.end()) {
            delete *it2;
            it2 = it-&gt;p_vector.erase(it2);
        }
        delete *it;
        it = m_vec.erase(it);
    }
</code></pre>
<p>Wobei in diesem Fall sinnvoller wäre, sich das erase zu sparen und am Ende einfach den kompletten vector zu clear()en.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227690</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 27 Jun 2012 09:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 10:10:26 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>HerbertB schrieb:</p>
<blockquote>
<p>Zu 1.: erase löscht den eintrag aus dem vector, aber ruft doch auch den destruktor auf?</p>
</blockquote>
<p>ja, aber nur den Destruktor vom Zeiger selbst, nicht von dem Object, auf das der Zeiger zeigt.</p>
</blockquote>
<p>Aha, danke, also dann event. noch ein</p>
<pre><code class="language-cpp">delete (*it)
</code></pre>
<p>nachstellen, dann wird der zeiger komplett gelöscht?</p>
<p>//EDIT:</p>
<p>Ok, jetzt hab ich das verstanden, das zwar der destruktor aufgerufen wird, aber das eigentliche objekt dadurch nicht zerstört/gelöscht wird.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>:</p>
<p>Wenn das nur mit gewalt geht, dann wird es die sinnvollste alternative sein, einen ptr_container zu verwenden.</p>
<p>Was jetzt noch bleibt, ist, wenn ich einen raw-pointer mit new erzeuge, und diesen dann mit push_back in den ptr_container überführe, wird dann eine copie im ptr_container gespeichert, oder der tatsächliche raw-pointer?</p>
<p>Sonst hätte ich ja, den raw-pointer, und den smart-pointer, der verschwindet sobald ich ihn aus dem ptr_container lösche.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227691</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Wed, 27 Jun 2012 10:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Wed, 27 Jun 2012 14:07:46 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>Was jetzt noch bleibt, ist, wenn ich einen raw-pointer mit new erzeuge, und diesen dann mit push_back in den ptr_container überführe, wird dann eine copie im ptr_container gespeichert, oder der tatsächliche raw-pointer?</p>
<p>Sonst hätte ich ja, den raw-pointer, und den smart-pointer, der verschwindet sobald ich ihn aus dem ptr_container lösche.</p>
</blockquote>
<p><code>push_back</code> macht immer eine Kopie des Objekts. Du übergibst <code>push_back</code> einen Zeiger und <code>push_back</code> macht ganz artig eine Kopie des Zeigers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227764</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 27 Jun 2012 14:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 06:19:09 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>HerbertB schrieb:</p>
<blockquote>
<p>Was jetzt noch bleibt, ist, wenn ich einen raw-pointer mit new erzeuge, und diesen dann mit push_back in den ptr_container überführe, wird dann eine copie im ptr_container gespeichert, oder der tatsächliche raw-pointer?</p>
<p>Sonst hätte ich ja, den raw-pointer, und den smart-pointer, der verschwindet sobald ich ihn aus dem ptr_container lösche.</p>
</blockquote>
<p><code>push_back</code> macht immer eine Kopie des Objekts. Du übergibst <code>push_back</code> einen Zeiger und <code>push_back</code> macht ganz artig eine Kopie des Zeigers.</p>
</blockquote>
<p>D.h. ich lege den raw-pointer mit new an, füge ihn mit push_back in den ptr_container (z.b. boost ptr_vector) ein, und zerstöre anschließend den raw-pointer mit delete gleich wieder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227998</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Thu, 28 Jun 2012 06:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 07:05:27 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>D.h. ich lege den raw-pointer mit new an, füge ihn mit push_back in den ptr_container (z.b. boost ptr_vector) ein, und zerstöre anschließend den raw-pointer mit delete gleich wieder?</p>
</blockquote>
<p>delete zerstört nicht den Zeiger, sondern das Objekt, auf das der Zeiger zeigt.</p>
<p>Mal eine kleine Analogie zum besseren Verständnis: (ich habe bewusst verzichtet, im folgenden Text C++-Ausdrücke wie delete, vector, pointer zu verwenden, wenn du ein wenig darüber nachdenkst, sollte es dir klar werden - ansonsten frag einfach)</p>
<p>Stell es dir so vor: du hast ein wichtiges Dokument gut versteckt in deinem Schreibtisch. Weil es so wichtig ist, schreibst du dir auf einen Zettel, wo genau du das Dokument versteckt hast. Und weil du viele wichtige Dokumente versteckt hast, hast du auch viele Zettel. Diese sind alle säuberlich in einer Mappe eingeheftet. Jetzt hast du dein neues Dokument versteckt, und den Zettel mit dem Ort möchtest du auch einheften. Du kopierst dir den Zettel und heftest die Kopie in die Mappe. Anschließend zerreißt du das Original.</p>
<p>Wenn du jetzt die Mappe verlieren solltest, sind die Dokumente zwar noch da, nur findest du sie nie wieder.</p>
<p>Und wenn du ein Dokument vernichten willst, dann schaust du in der Mappe nach, wo sich das Dokument befindet und zerreißt das Dokument. Der Zettel mit dem Ort des Dokumentes ist dann zwar immer noch da, aber nutzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228003</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 28 Jun 2012 07:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 07:10:53 GMT]]></title><description><![CDATA[<p>Hmmm, ok, und wie sieht das abgebildet auf meinen beispielcode aus post 1 aus?</p>
<p>Der vector ist die mappe, wo ich den kleinen zettel abhefte? Und der raw pointer ist das eigentliche dokument?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228005</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Thu, 28 Jun 2012 07:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 07:16:40 GMT]]></title><description><![CDATA[<p>nagut, ich dachte, die Analogie wäre mit ein wenig Nachdenken erkennbar.</p>
<p>du legst ein neues Dokument mit &quot;new&quot; an. Den Rückgabewert - die Adresse des Objektes - speicherst du in einem Pointer (der kleine Zettel). Bei push_back wird der Pointer kopiert, also hast du nun zwei Pointer, die auf ein Objekt zeigen. Mit delete löschst du das eigentliche Objekt (zerreißen des Dokumentes). Die Pointer existieren anschließend immer noch, nur sind sie nicht mehr verwendbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228006</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 28 Jun 2012 07:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 07:26:19 GMT]]></title><description><![CDATA[<p>Hier sind Videos zur Zeigererklärung<br />
<a href="http://cslibrary.stanford.edu/104/" rel="nofollow">http://cslibrary.stanford.edu/104/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228009</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 28 Jun 2012 07:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 07:34:14 GMT]]></title><description><![CDATA[<p>Ich komme von der java seite, und darum verwirrt mich das jetzt noch ein bisschen, aber ich glaube jetzt hab ichs.</p>
<p>Ich habe ein objekt mit new angelegt, und die adresse steht im pointer, wenn ich jetzt push_back mache, habe ich einen zweiten pointer auf das gleiche objekt.</p>
<p>Wenn ich das objekt zerstöre, zeigen beide pointer irgendwo hin --&gt; undefiniertes verhalten.</p>
<p>Mein problem:</p>
<p>Ich habe die adresse auf ein objekt in dem raw pointer und ich habe die adresse auf ein objekt im vektor.</p>
<p>Ich hole mir über die adresse aus dem vektor das objekt und zerstöre es mit delete, anschließend lösche ich die adresse aus dem vektor.</p>
<p>Jetzt bleibt aber noch immer die adresse im raw-pointer, die ins nirgendwo zeigt.</p>
<p>Was mache ich jetzt damit? Einfach NULL setzen? Oder wie werde ich den pointer los?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a></p>
<p>Danke für die videos, aber die funktionieren bei mir nicht. Vielleicht leigt das am browser oder fehlenden codecs bei mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228012</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Thu, 28 Jun 2012 07:34:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 14:30:09 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>Ich habe ein objekt mit new angelegt, und die adresse steht im pointer, wenn ich jetzt push_back mache, habe ich einen zweiten pointer auf das gleiche objekt.</p>
</blockquote>
<p>Richtig.</p>
<p>HerbertB schrieb:</p>
<blockquote>
<p>Wenn ich das objekt zerstöre, zeigen beide pointer irgendwo hin --&gt; undefiniertes verhalten.</p>
</blockquote>
<p>Naja, zeigen dürfen sie schon darauf, sie dürfen nur nicht schreibend darauf zugreifen.</p>
<p>HerbertB schrieb:</p>
<blockquote>
<p>Ich habe die adresse auf ein objekt in dem raw pointer und ich habe die adresse auf ein objekt im vektor.</p>
<p>Ich hole mir über die adresse aus dem vektor das objekt und zerstöre es mit delete, anschließend lösche ich die adresse aus dem vektor.</p>
<p>Jetzt bleibt aber noch immer die adresse im raw-pointer, die ins nirgendwo zeigt.</p>
<p>Was mache ich jetzt damit? Einfach NULL setzen? Oder wie werde ich den pointer los?.</p>
</blockquote>
<p>Da kannst du nichts machen. Den Zeiger bekommst du erst am Ende des Gültigkeitsbereichs los. Du kannst also nur den Gültigkeitsbereich verkleinern.<br />
Natürlich kannst du ihn auch NULL-setzen. Aber was bringt dir das? Egal ob NULL oder nicht NULL, in beiden Fällen wirst du den Zeiger doch nicht mehr verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228180</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 28 Jun 2012 14:30:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 15:14:19 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a></p>
<p>Danke für die videos, aber die funktionieren bei mir nicht. Vielleicht leigt das am browser oder fehlenden codecs bei mir.</p>
</blockquote>
<p>Du brauchst da wohl Quicktime dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228187</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 28 Jun 2012 15:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Thu, 28 Jun 2012 17:16:52 GMT]]></title><description><![CDATA[<p>Java-Objektreferenzen sind vereinfachte Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228226</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Fri, 29 Jun 2012 08:04:21 GMT]]></title><description><![CDATA[<p>Ich glaub jetzt hab ich es verstanden.</p>
<p>Abschließend noch, wenn ich mehrere zeiger auf ein objekt habe, das objekt aber dann zerstöre, ist der speicher wieder freigegeben und es entsteht kein speicherleck. Die zeiger darauf sind noch vorhanden, und verschwinden erst wenn der gültigkeitsbereich verlassen wird.</p>
<p>Kann man eigentlich irgendwie überprüfen, ob das objekt auf das der zeiger zeigt, noch existiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228326</guid><dc:creator><![CDATA[HerbertB]]></dc:creator><pubDate>Fri, 29 Jun 2012 08:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Fri, 29 Jun 2012 09:20:43 GMT]]></title><description><![CDATA[<p>HerbertB schrieb:</p>
<blockquote>
<p>Kann man eigentlich irgendwie überprüfen, ob das objekt auf das der zeiger zeigt, noch existiert?</p>
</blockquote>
<p>Nein, das musst du dir schon selber merken wenn du das wirklich brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228361</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Jun 2012 09:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Fri, 29 Jun 2012 09:31:32 GMT]]></title><description><![CDATA[<p>Manche smart pointer können das, bspw. der QPointer aus Qt. Der setzt sich selbst auf NULL, wenn das enthaltene Objekt zerstört wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228370</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 29 Jun 2012 09:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Objectstrukturen mit Zeigern on Fri, 29 Jun 2012 09:32:07 GMT]]></title><description><![CDATA[<p>Wenn man wirklich mehrere Zeiger auf ein Objekt benötigt, bieten sich shared_ptr und weak_ptr an. Die shared_ptr halten das Objekt am Leben, solange noch ein shared_ptr auf das Objekt zeigt, und die weak_ptr wissen, ob noch shared_ptr auf dieses Objekt zeigen (ergo ob das Objekt noch lebt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228372</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 29 Jun 2012 09:32:07 GMT</pubDate></item></channel></rss>