<?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[Worin besteht der Unterschied?]]></title><description><![CDATA[<p>Hi zusammen.</p>
<p>Ich habe eine Frage zu einem Algorithmus den ich programmiert habe:<br />
Der folgende Code arbeitet korrekt alle Phasen meines Algorithmus ab.</p>
<pre><code class="language-cpp">int main()
{
   GNG_Algorithm gng = GNG_Algorithm();
   gng.gng_initialize(100, 10, 2, 100, 10000, 0.2, 0.006, 50, 0.995, 0.5, &quot;&quot;);	

   gng.gng_executeAlgorithm();
   gng.createClusterPool();
   ClusterPool clusterpool = gng.getClusterPool();
   return 0;	
}
</code></pre>
<p>Wenn ich nun aber folgendes versuche zu realisieren, also die Objekte global definiere:</p>
<pre><code class="language-cpp">GNG_Algorithm gng;
ClusterPool clusterpool;

int main()
{
   gng = GNG_Algorithm();
   gng.gng_initialize(100, 10, 2, 100, 10000, 0.2, 0.006, 50, 0.995, 0.5, &quot;&quot;);	

   gng.gng_executeAlgorithm();
   gng.createClusterPool();
   clusterpool = gng.getClusterPool();
   return 0;	
}
</code></pre>
<p>Dann kann der Algorithmus nicht abgearbeitet werden.<br />
Ich vermute dass einige Objekte meiner Klasse bereits gelösct werden, obwohl sie noch in späteren Phasen des Algorithmus gebraucht werden.</p>
<p>Kann mir vielleicht jemand erklären woran dies liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231873/worin-besteht-der-unterschied</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 13:51:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231873.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jan 2009 14:26:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 14:26:17 GMT]]></title><description><![CDATA[<p>Hi zusammen.</p>
<p>Ich habe eine Frage zu einem Algorithmus den ich programmiert habe:<br />
Der folgende Code arbeitet korrekt alle Phasen meines Algorithmus ab.</p>
<pre><code class="language-cpp">int main()
{
   GNG_Algorithm gng = GNG_Algorithm();
   gng.gng_initialize(100, 10, 2, 100, 10000, 0.2, 0.006, 50, 0.995, 0.5, &quot;&quot;);	

   gng.gng_executeAlgorithm();
   gng.createClusterPool();
   ClusterPool clusterpool = gng.getClusterPool();
   return 0;	
}
</code></pre>
<p>Wenn ich nun aber folgendes versuche zu realisieren, also die Objekte global definiere:</p>
<pre><code class="language-cpp">GNG_Algorithm gng;
ClusterPool clusterpool;

int main()
{
   gng = GNG_Algorithm();
   gng.gng_initialize(100, 10, 2, 100, 10000, 0.2, 0.006, 50, 0.995, 0.5, &quot;&quot;);	

   gng.gng_executeAlgorithm();
   gng.createClusterPool();
   clusterpool = gng.getClusterPool();
   return 0;	
}
</code></pre>
<p>Dann kann der Algorithmus nicht abgearbeitet werden.<br />
Ich vermute dass einige Objekte meiner Klasse bereits gelösct werden, obwohl sie noch in späteren Phasen des Algorithmus gebraucht werden.</p>
<p>Kann mir vielleicht jemand erklären woran dies liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646698</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Fri, 16 Jan 2009 14:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 14:34:34 GMT]]></title><description><![CDATA[<p>Spielt es denn eine Rolle, ob <code>gng</code> oder <code>clusterpool</code> zuerst initialisiert werden? Denn die Initialisierungsreihenfolge ist bei globalen und statischen Objekten undefiniert.</p>
<p>Gelöscht sollte nichts werden, die Objekte werden erst bei Programmende zerstört. Was geht denn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646703</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 16 Jan 2009 14:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 14:36:50 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Wenn ich nun aber folgendes versuche zu realisieren, also die Objekte global definiere:</p>
</blockquote>
<p>Wobei globale Objekte eh pfui sind.</p>
<p>Ich nehme mal an, das GNG_Algorithm und ClusterPool keinen sauberen Kopierkonstruktor und Zuweisungsoperator besitzen.</p>
<pre><code class="language-cpp">// Aufruf mit Standardkonstruktor
GNG_Algorithm gng = GNG_Algorithm();

// Gegenüber Standardkonstruktor und anschließenden Zuweisungsoperator
GNG_Algorithm gng;
gng = GNG_Algorithm();
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646704</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 16 Jan 2009 14:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:05:18 GMT]]></title><description><![CDATA[<p>Wenn ich etwa auf eine Vector eines internen Objekts zugreife,<br />
so ist dieser leer.<br />
Obwohl er im dem entsprechendem Konstruktor befüllt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646729</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:08:59 GMT]]></title><description><![CDATA[<p>Wann greifst du zu?</p>
<p>Zeig mal die Konstruktoren und den Zuweisungsoperator, die Memberdeklarationen wären auch nicht schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646732</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:08:59 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:25:20 GMT]]></title><description><![CDATA[<blockquote>
<p>Spielt es denn eine Rolle, ob gng oder clusterpool zuerst initialisiert werden? Denn die Initialisierungsreihenfolge ist bei globalen und statischen Objekten undefiniert.</p>
</blockquote>
<p>Innerhalb einer Übersetzungseinheit ist das schon definiert. (Nämlich in der Reihenfolge der Deklaration).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646737</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:28:27 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Innerhalb einer Übersetzungseinheit ist das schon definiert. (Nämlich in der Reihenfolge der Deklaration).</p>
</blockquote>
<p>Danke für die Berichtigung, das war mir nicht bewusst. Ich dachte, damit hätte ich mal Probleme gehabt... Wahrscheinlich hab ich mich getäuscht. <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>
<p>Naja, besser, man verwendet erst gar keine globalen Variablen. <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/1646741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646741</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:30:55 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Innerhalb einer Übersetzungseinheit ist das schon definiert. (Nämlich in der Reihenfolge der Deklaration).</p>
</blockquote>
<p>Danke für die Berichtigung, das war mir nicht bewusst. Ich dachte, damit hätte ich mal Probleme gehabt... Wahrscheinlich hab ich mich getäuscht. <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>Du wirst kaum nur eine Übersetzungseinheit gehabt haben. Das hat man selten in richtigen Projekten und dann hat man das Problem relativ schnell, dass dir Reihenfolge eine Rolle spielt..</p>
<p>Aber das ist ja ein Grund, warum globals böse sind. <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/1646743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646743</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 15:53:09 GMT]]></title><description><![CDATA[<p>Der Grund für die globalen Variablen liegt darin,<br />
dass ich gerade versuche für meinen C++ Algorithmus einen Wrapper für D zu schreiben.</p>
<p>Dabei muss ich alle benötigten C++ Schnittstellen-Methoden soweit vereinfachen, dass nur primitive Datentypen verwendet werden.</p>
<p>Und dies wollte ich mit &quot;dazwischengeschobenen&quot; Methoden realisieren, welche eben nur primitive Datentypen verwenden.<br />
Aber das geht bisher leider noch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646753</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Fri, 16 Jan 2009 15:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 16:07:07 GMT]]></title><description><![CDATA[<p>Vielleicht kann ich es nochmal etwas genauer erklären.<br />
Der ganze Algorithmus soll nur wenige Schnittstellen besitzen.<br />
Die Hauptklasse ist GNG_Algorithm, dessen Konstruktor wie folgt aussieht:</p>
<pre><code class="language-cpp">GNG_Algorithm::GNG_Algorithm(){

		connectionspool = ConnectionsPool();
		connectionspool_ptr = &amp;connectionspool;
		nodepool = NodePool();
		nodepool_ptr = &amp;nodepool;
		signals = Signals();
		signals_ptr = &amp;signals;
		gng_parameters = GNG_Parameters();
		gng_parameters_ptr = &amp;gng_parameters;
		clusterpool = ClusterPool();

	}
</code></pre>
<p>Wenn der Anwender den Algo ausführen möchte, erstellt er ein Object von dem GNG_Algorithm.</p>
<pre><code class="language-cpp">GNG_Algorithm gng = GNG_Algorithm();
</code></pre>
<p>Initialisiert diesen (Hier werden dann auch alle im Konstruktor angegeben Objekte initialisiert)</p>
<pre><code class="language-cpp">gng.gng_initialize(...);
</code></pre>
<p>und lässt ihn dann laufen.</p>
<pre><code class="language-cpp">gng.gng_executeAlgorithm();
</code></pre>
<p>Klappt auch alles wunderbar, wenn ich mein Objekt GNG_Algorithm lokal behalte.</p>
<p>Nun kommt aber die Schnittstelle zu D ins Spiel.<br />
Hier darf ich nur noch primitive Datentypen als Parameter verwenden.<br />
Also kann ich mir in D ja auch nicht das Objekt GNG_Algorithm speichern.</p>
<p>Also wollte ich einen Wrapper.cpp dazwischen setzen.<br />
Dieser enthält nur Methoden mit primitiven Datentypen. Innerhalb seiner Methoden greift er dann aber auf das<br />
Objekt GNG_Algorithm() zu.</p>
<p>In der Theorie hoffentlich verständlich für euch.<br />
Praktisch funktionierts aber leider garnicht, da ständig auf Vektoren von untergeordneten<br />
Klassen zugegriffen wird, diese sind leer, obwohl sie eigentlich schon definiert wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646762</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Fri, 16 Jan 2009 16:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Worin besteht der Unterschied? on Fri, 16 Jan 2009 16:22:36 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Der Grund für die globalen Variablen liegt darin,<br />
dass ich gerade versuche für meinen C++ Algorithmus einen Wrapper für D zu schreiben.</p>
<p>Dabei muss ich alle benötigten C++ Schnittstellen-Methoden soweit vereinfachen, dass nur primitive Datentypen verwendet werden.</p>
<p>Und dies wollte ich mit &quot;dazwischengeschobenen&quot; Methoden realisieren, welche eben nur primitive Datentypen verwenden.<br />
Aber das geht bisher leider noch nicht.</p>
</blockquote>
<p>Sowas macht man typischerweise mit C-Funktionen und Handles auf die C++ Objekte, z.B.:</p>
<pre><code class="language-cpp">//irgendwo im C++-Teil
class MyVerySophisticatedCPPType
{
    //:::
    void someFunc(ArgType someArgs);
};

//Interface (header)
#ifdef __cplusplus
extern &quot;C&quot;
{
#endif

typedef void* HandleType;
typedef int ErrCode;

HandleType createMyVerySophisticatedCPPType(ArgType args); //Ctor

ErrCode someFunc(HandleType handle, ArgType args); //eine der publics

void destroyMyVerySophisticatedCPPType(HandleType handle); //Dtor

#ifdef __cplusplus
}
#endif

//Impl.
HandleType createMyVerySophisticatedCPPType(ArgType args)
{
    return new MyVerySophisticatedCPPType(args);
}

ErrCode someFunc(HandleType handle, ArgType args);
{
    reinterpret_cast&lt;MyVerySophisticatedCPPType*&gt;(handle)-&gt;someFunc(args);
}

void destroyMyVerySophisticatedCPPType(HandleType handle)
{
    delete reinterpret_cast&lt;MyVerySophisticatedCPPType*&gt;(handle);
}
</code></pre>
<p>Nur so als Schema. Solche C-Funktionen kann man dann z.B. in D benutzen, aber auch in vielen anderen Programmiersprachen oder für dlls.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1646768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1646768</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 16 Jan 2009 16:22:36 GMT</pubDate></item></channel></rss>