<?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[Statischen Member initialisieren]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich möchte einen static Member initialisieren. Kann man das vielleicht eleganter machen? Momentan sieht die Definition zu ClassX so aus:</p>
<pre><code class="language-cpp">ClassA *ClassX::m_ptrObj=0; // m_ptrObj ist static innerhalb von ClassX. Erstmal zu 0 machen.

// Im Konstruktor wird die static Var initialisiert falls nicht schon geschehen:
ClassX::ClassX(int InitWert) {
  if (m_ptrObj==0)
    m_ptrObj = New ClassA(Initwert); //Der Initwert steht jedoch erst nach Programmstart zur Verfügung. (In main berechnet)
}
</code></pre>
<p>Vielen Dank</p>
<p>L</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256216/statischen-member-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 10:43:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256216.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Dec 2009 16:56:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Statischen Member initialisieren on Wed, 09 Dec 2009 16:56:24 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich möchte einen static Member initialisieren. Kann man das vielleicht eleganter machen? Momentan sieht die Definition zu ClassX so aus:</p>
<pre><code class="language-cpp">ClassA *ClassX::m_ptrObj=0; // m_ptrObj ist static innerhalb von ClassX. Erstmal zu 0 machen.

// Im Konstruktor wird die static Var initialisiert falls nicht schon geschehen:
ClassX::ClassX(int InitWert) {
  if (m_ptrObj==0)
    m_ptrObj = New ClassA(Initwert); //Der Initwert steht jedoch erst nach Programmstart zur Verfügung. (In main berechnet)
}
</code></pre>
<p>Vielen Dank</p>
<p>L</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820212</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Wed, 09 Dec 2009 16:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Wed, 09 Dec 2009 18:25:57 GMT]]></title><description><![CDATA[<p>Vielleicht so?</p>
<pre><code class="language-cpp">ClassA *ClassX::m_ptrObj=0; 

ClassX::ClassX(int InitWert) :
	m_ptrObj(new ClassA(InitWert)) { }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1820260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820260</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Wed, 09 Dec 2009 18:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Wed, 09 Dec 2009 18:34:56 GMT]]></title><description><![CDATA[<p>Daran habe ich auch schon gedacht. Jedoch kann man eine static Variable nicht in der Konstruktor InitListe intitialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820267</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Wed, 09 Dec 2009 18:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Wed, 09 Dec 2009 18:47:11 GMT]]></title><description><![CDATA[<p>Was du vor hast ist schlechter Design... Die Initialisierung eines statischen Members von der Konstruktion eines (des ersten) Objektes der Klasse abhängig machen.</p>
<p>Erklär mal welches Problem du lösen willst.</p>
<p>Wenn du dir ganz sicher bist dass es nur so gehen kann, lager den Zugriff auf die statische Variable in eine separate statische Funktion aus. Gewährleiste, dass niemand direkt auf diesen statischen Member zugreift, sondern nur über diese statische Funktion. Rufe im Konstruktor deines ClassX ebenfalls diese Methode auf.<br />
Die Methode selber prüft auf NULL und initialisiert, oder gibt sofort das Objekt zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820274</guid><dc:creator><![CDATA[Korntrauer]]></dc:creator><pubDate>Wed, 09 Dec 2009 18:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Wed, 09 Dec 2009 19:45:19 GMT]]></title><description><![CDATA[<p>Wenns _wirklich_ nötig ist, dann ist das ein Fall für das Singleton Pattern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820297</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Dec 2009 19:45:19 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Thu, 10 Dec 2009 00:58:28 GMT]]></title><description><![CDATA[<p>Also ich würde mir hier vielmehr Gedanken zum Thema Thread-Safety machen, als mir den Kopf über irgendwelche Schnörkel wie Auslagerung in Helper-Funktionen.<br />
Und natürlich auch noch wichtig: Wer soll das Objekt dann wieder löschen, und wann genau soll das passieren? Wie kannst du garantieren dass es nicht zu früh gelöscht wird - also nicht bevor das letzte Objekt gelöscht wurde, welches die Variable braucht?<br />
Und wie kannst du garantieren dass es nicht zu spät gelöscht wird, also nicht nachdem irgendwas gelöscht/de-initialisiert/... wurde, was du brauchst, um das Objekt korrekt löschen zu können?</p>
<p>Alles nicht so einfach.</p>
<p>@Korntrauer:<br />
Ich finde nicht dass es allgemein schlechtes Design ist, diverse Initialisierungen zu verzögern bis das erste Objekt einer Klasse konstruiert wird.<br />
Es ist nur in C++ im Allgemeinen problematisch was die korrekte Umsetzung angeht. (Im Speziellen, wenn man auf Threads und DLLs/SOs und all diese schönen Dinge verzichtet, ist es auch in C++ einigermassen gut zu realisieren)</p>
<p>In diesem Fall finde ich das Design auch fragwürdig, da &quot;InitWert&quot; jedesmal an den Konstruktor übergeben wird, aber nur beim 1. mal verwendet wird. Wenn ich einmal 1 und einmal 2 mitgebe, verhält sich das Programm anders, je nachdem ob ich zuerst das &quot;einser&quot; Objekt konstruiere, oder zuerst das &quot;zweier&quot; Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820383</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 10 Dec 2009 00:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Thu, 10 Dec 2009 07:04:32 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>In diesem Fall finde ich das Design auch fragwürdig, da &quot;InitWert&quot; jedesmal an den Konstruktor übergeben wird, aber nur beim 1. mal verwendet wird. Wenn ich einmal 1 und einmal 2 mitgebe, verhält sich das Programm anders, je nachdem ob ich zuerst das &quot;einser&quot; Objekt konstruiere, oder zuerst das &quot;zweier&quot; Objekt.</p>
</blockquote>
<p>Genau das hab ich ja auch gemeint. Die Gestalt des static members ist vom als erstes konstruierten Objekt abhängig. Der übergebene Parameter eines normalen Konstruktors beeinflusst eine statische Variable...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820406</guid><dc:creator><![CDATA[Korntrauer]]></dc:creator><pubDate>Thu, 10 Dec 2009 07:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Thu, 10 Dec 2009 10:05:46 GMT]]></title><description><![CDATA[<p>Es geht um einen Zufallsgenerator der früher pro Objekt exisitiert hat und nachdem ich festgestellt habe das sich nun alle Objekte gleich verhalten soll er nun static werden.</p>
<p>Ich werde es wie Korntrauer machen:<br />
Eine extra static Funktion die einmal gerufen wird um den ZufallsGen zu setzen. Alle weiteren Aufrufe laufen ins leere da der Rand nun bereits exisitert. Über Freigabe brauche ich mir keine Gedanken zu machen? Static Variablen werden doch eh erst am Programmende entfernt. Das würde doch dann das Betriebsystem machen. Wenn es für C++ keinen static Konstruktor gibt dann doch auch keinen Destruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820470</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Thu, 10 Dec 2009 10:05:46 GMT</pubDate></item><item><title><![CDATA[Reply to Statischen Member initialisieren on Thu, 10 Dec 2009 13:05:26 GMT]]></title><description><![CDATA[<p>Freund Luigi, du machst hier &quot;new&quot;.<br />
Naja, what shalls.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820563</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 10 Dec 2009 13:05:26 GMT</pubDate></item></channel></rss>