<?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[Problem mit Vector und Konstruktor und this-Zeiger in Klasse]]></title><description><![CDATA[<pre><code class="language-cpp">struct BaseClass
{
    BaseClass();

    static std::vector&lt;BaseClass*&gt; thisArray;
};

std::vector&lt;BaseClass*&gt; BaseClass::thisArray;

BaseClass::BaseClass()
{
    thisArray.push_back(this);
}
</code></pre>
<p>Wenn ich ein paar Objekte dieser Klasse erzeuge, speichert es zuerst zwar die this Zeiger, später im Programm sind sie aber wieder weg. Und der Pointer zum thisArray (&amp;thisArray[0]) ändert seinen Wert. Weiss jemand woran das liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259316/problem-mit-vector-und-konstruktor-und-this-zeiger-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 20:25:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259316.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Jan 2010 14:43:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Thu, 21 Jan 2010 14:48:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct BaseClass
{
    BaseClass();

    static std::vector&lt;BaseClass*&gt; thisArray;
};

std::vector&lt;BaseClass*&gt; BaseClass::thisArray;

BaseClass::BaseClass()
{
    thisArray.push_back(this);
}
</code></pre>
<p>Wenn ich ein paar Objekte dieser Klasse erzeuge, speichert es zuerst zwar die this Zeiger, später im Programm sind sie aber wieder weg. Und der Pointer zum thisArray (&amp;thisArray[0]) ändert seinen Wert. Weiss jemand woran das liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842711</guid><dc:creator><![CDATA[titan99_]]></dc:creator><pubDate>Thu, 21 Jan 2010 14:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Thu, 21 Jan 2010 14:50:39 GMT]]></title><description><![CDATA[<p>Der Pointer zum thisArray verschiebt sich nicht, sondern das erste Element liegt wo anders. Wenn der vector nicht genug Platz für die Elemente hat, wird neuer Speicher reserviert und er kopiert sie alle dahin und macht da weiter. Mit vector.reserve(groesse) kann man schon einmal Platz reservieren (wenn bekannt) und so unnötiges Kopieren verhindern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842716</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 21 Jan 2010 14:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Thu, 21 Jan 2010 14:52:08 GMT]]></title><description><![CDATA[<p>titan99_ schrieb:</p>
<blockquote>
<p>Wenn ich ein paar Objekte dieser Klasse erzeuge, speichert es zuerst zwar die this Zeiger, später im Programm sind sie aber wieder weg.</p>
</blockquote>
<p>Ist das Objekt noch gültig?</p>
<pre><code class="language-cpp">class A {};

int main() {
    std::vector&lt;A*&gt; avector;
    {
        A a;
        avector.push_back(&amp;a);
    }   // a wird destruiert...
    // &lt;-- hier ist der Zeiger zwar noch in avector enthalten, aber zeigt auf
    //     einen ungültigen (da freigegebenen) Speicherbereich.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1842717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842717</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 21 Jan 2010 14:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Fri, 22 Jan 2010 08:58:43 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Ist das Objekt noch gültig?</p>
</blockquote>
<p>Habe die Objekte global angelegt.</p>
<pre><code class="language-cpp">struct BaseClass {...};
BaseClass a, b, c;

int main()
{
...
}
</code></pre>
<p>Werde es mit vector.reserve(groesse) versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843085</guid><dc:creator><![CDATA[titan99_]]></dc:creator><pubDate>Fri, 22 Jan 2010 08:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Fri, 22 Jan 2010 09:16:49 GMT]]></title><description><![CDATA[<p>titan99_ schrieb:</p>
<blockquote>
<p>Habe die Objekte global angelegt.</p>
</blockquote>
<p>Ich hoffe du hast dafür einen guten Grund (In der Regel deuten globale Variablen ein schlechter Programmierstil).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843097</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 22 Jan 2010 09:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Fri, 22 Jan 2010 09:25:38 GMT]]></title><description><![CDATA[<p>titan99_ schrieb:</p>
<blockquote>
<p>Habe die Objekte global angelegt.</p>
</blockquote>
<p>Vorsicht: Es könnte sein dass die Objekte vor dem Vektor initialisiert werden, da über mehrere Übersetzungseinheiten hinweg die Initialisierungsreihenfolge von globalen Objekten (und statische Member sind globale Objekte) nicht vorgeschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843104</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 22 Jan 2010 09:25:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Mon, 25 Jan 2010 10:04:37 GMT]]></title><description><![CDATA[<p>Wenn ich mit vector.reserve(x) Speicher reserviere ändert sich der Pointer auf das erste Element nicht mehr. Aber später in der main() Funktion ist der Vektor wieder leer. Ich brauche die this-Zeiger statisch weil ich eine statische Funktion als Funktionspointer für Windows für WndProc habe. Probierte es schon mit boost::function, klappte aber nicht. Und ich dachte es sei sowieso gut wenn eine Klasse weiss wieviele und welche Objekte es von ihr gibt. Das mit den verschiedenen Übersetzungseinheiten leuchtet mir ein. Der Vektor initialisiert sich also nach dem Objekt (nocheinmal?). Kann man die Reihenfolge irgendwie festlegen oder ist das Programm dann sowieso zu anfällig? Im Moment brauche ich ein normales Array und ein unsigned int das die Grösse mitzählt. Oder kennt jemand noch andere Möglichkeiten oder hat sonst eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844413</guid><dc:creator><![CDATA[titan99_]]></dc:creator><pubDate>Mon, 25 Jan 2010 10:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Mon, 25 Jan 2010 12:54:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>du könntest es z.B. so in der Art machen:</p>
<pre><code class="language-cpp">struct Sub;

struct Base {
    std::list &lt;Sub&gt; subs; //besser um Objekte zwischendrin zu löschen
    unsigned counter;

    Sub* NewSub(){
        subs.push_back(Sub());
        counter++;
        return &amp;subs[counter - 1];
    }
}

Base myBase;
Sub *mySub = myBase.NewSub()
</code></pre>
<p>Und dann noch eine Funktion, die ein Sub wieder löscht, und den counter wieder runterzählt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844485</guid><dc:creator><![CDATA[varginator]]></dc:creator><pubDate>Mon, 25 Jan 2010 12:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vector und Konstruktor und this-Zeiger in Klasse on Mon, 25 Jan 2010 15:06:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Sub&amp; NewSub(){
        subs.push_back(Sub());
        counter++;
        return subs[counter - 1];
    }
</code></pre>
<p>Viel schöner so <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/1844572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844572</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Mon, 25 Jan 2010 15:06:03 GMT</pubDate></item></channel></rss>