<?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[Gegenseitige Referenz]]></title><description><![CDATA[<p>hI</p>
<p>Kann man Referenzen gegenseitig machen? So das A B kennt und B A?</p>
<pre><code class="language-cpp">struct B;

struct A
{
...daten
  B&amp; my_b;
};

struct B
{
...daten
  A&amp; my_a;
};
</code></pre>
<p>Greez <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/topic/156950/gegenseitige-referenz</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 00:38:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156950.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Aug 2006 18:41:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gegenseitige Referenz on Mon, 21 Aug 2006 18:41:24 GMT]]></title><description><![CDATA[<p>hI</p>
<p>Kann man Referenzen gegenseitig machen? So das A B kennt und B A?</p>
<pre><code class="language-cpp">struct B;

struct A
{
...daten
  B&amp; my_b;
};

struct B
{
...daten
  A&amp; my_a;
};
</code></pre>
<p>Greez <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/1121772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121772</guid><dc:creator><![CDATA[fR4g*g*3R]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Mon, 21 Aug 2006 18:57:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ja, und zwar genaus so wie du es gezeigt hast.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121790</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Mon, 21 Aug 2006 18:58:44 GMT]]></title><description><![CDATA[<p><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="🙂"
    /> Danke <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/1121791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121791</guid><dc:creator><![CDATA[dANk3R]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 07:42:15 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>ja, und zwar genaus so wie du es gezeigt hast.</p>
</blockquote>
<p>Im ernst? Ich habs jetzt nicht ausprobiert, aber laut meiner Erfahrung geht das nicht. Weil die Objektgrößen von B in Struct A nicht bekannt sind. Das geht nur mit Pointern... aber nicht mit Referenzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121966</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 22 Aug 2006 07:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 07:46:15 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>doch geht mit Referenzen genauso wie mit Pointern.<br />
Und ich habs auch extra ausprobiert.</p>
<p>/Edit : Das Problem dürfte eher sein, das die Referenzen ja schon mit dem jeweiligen Konstruktor belegt werden müßen. Das heißt für eine Instanz von A braucht man eine bereits vorhandene Instanz von B, und für eine Instanz für B braucht man eine bereits vorhandene Instanz von A... also wäre in diesem Fall Pointer angebrachter.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121968</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 22 Aug 2006 07:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 08:17:17 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo<br />
...Das Problem dürfte eher sein, das die Referenzen ja schon mit dem jeweiligen Konstruktor belegt werden müßen. ...</p>
</blockquote>
<p>Eben. Deswegen sage ich: Nein, geht nicht !</p>
<p>Liegt einfach daran, dass man mit einer Referenz eben doch etwas Bestimmtes ausdrückt (&quot;Dieses Ding kennst Du und es muss da sein&quot;) und mit einem Pointer eben etwas Anderes (&quot;Dieses Ding kannst Du kennen, wenn es da ist&quot;).<br />
Deswegen glaube ich auch nicht, dass Du es ausprobiert hast <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="😉"
    /> ... jedenfalls nicht, dass Du ein A oder ein B angelegt hast (geschweige denn, beide).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121976</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 22 Aug 2006 08:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 08:10:53 GMT]]></title><description><![CDATA[<p>Es geht auch mit Referenzen.<br />
Dazu muss man noch einen Konstruktor definieren, und die Referenz in der Initialisierungsliste initialisieren.<br />
Da die Definition des Konstruktors in der *.cpp erst nach der Definition der Klassen oder der structs erfolgen kann, kennt der Compiler dann auch beide Definitionen.</p>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121988</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Tue, 22 Aug 2006 08:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 08:15:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3891">@DJohn</a>:<br />
Da Du akaris Edit nicht verinnerlicht zu haben scheinst, versuche doch einfach mal selbst, zwei Klassen zu schreiben die je eine Referenz auf die andere Klasse enthalten und diese auch beide zu instanziieren. Das Ergebnis führst Du uns dann mal vor, das interessiert mich nämlich brennend. <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/1121992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121992</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 22 Aug 2006 08:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 09:35:34 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3891">@DJohn</a>:<br />
Da Du akaris Edit nicht verinnerlicht zu haben scheinst, versuche doch einfach mal selbst, zwei Klassen zu schreiben die je eine Referenz auf die andere Klasse enthalten und diese auch beide zu instanziieren. Das Ergebnis führst Du uns dann mal vor, das interessiert mich nämlich brennend. <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>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;
struct B;
struct A {
	A(B&amp; b);
	B&amp; b_;
	string name_;
};

struct B {
	B(const char* n, A&amp; a);
	A&amp; a_;
	string name_;
};

A::A(B&amp; b) : b_(b) {}
B::B(const char* n, A&amp; a) : a_(a), name_(n) {}

int main() {
	A a = *new B(&quot;Fred&quot;, a);
	a.name_ = &quot;Hallo&quot;;
	cout &lt;&lt; a.name_ &lt;&lt; &quot; &quot; &lt;&lt; a.b_.name_ &lt;&lt; endl;
	cout &lt;&lt; a.name_ &lt;&lt; &quot; &quot; &lt;&lt; a.b_.name_ &lt;&lt; &quot; &quot; &lt;&lt; a.b_.a_.name_ &lt;&lt; endl;
}
</code></pre>
<p>Ich denke solange man im Ctor von B das A-Objekt nicht verwendet (ist ja noch nicht konstruiert) sondern nur die Referenz speichert, ist das Ganze ok (mal von dem Mem-Leak abgesehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122011</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 22 Aug 2006 09:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 09:38:10 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3891">@DJohn</a>:<br />
Da Du akaris Edit nicht verinnerlicht zu haben scheinst, versuche doch einfach mal selbst, zwei Klassen zu schreiben die je eine Referenz auf die andere Klasse enthalten und diese auch beide zu instanziieren. Das Ergebnis führst Du uns dann mal vor, das interessiert mich nämlich brennend. <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>gegenseitiges referenzieren mit echten referenzen dürfte im allgemeinen keine gute idee sein - hauptsächlich deshalb, weil es schwierig ist, geeignete invarianten dafür zu finden. möglich ist es allerdings schon (wenn es auch eines etwas weniger präzise definierten teil der sprache betrifft).</p>
<pre><code class="language-cpp">struct A;
struct B
{
    A&amp; a;
    B();
    ~B();
};
struct A
{
    B&amp; b;
    A(B&amp;);
};

A::A(B&amp; b) : b(b) {}
B::B() : a(*new A(*this)) {}
B::~B() { delete &amp;a; }
</code></pre>
<p>eine andere variante wäre, zunächst nur geeigneten speicher anzufordern (etwa über einen allocator) und dann eine referenz auf diesen noch nicht initialisierten speicher zu formen.<br />
siehe auch<br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#363" rel="nofollow">Initialization of class from self</a><br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#453" rel="nofollow">References may only bind to “valid” objects</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122012</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Aug 2006 09:38:10 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 09:42:21 GMT]]></title><description><![CDATA[<p>Ojeojeoje <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a>:<br />
Das funktioniert aber doch nur, weil der Compiler die Zuweisung zu a bei der Initialisierung zur Konstruktion optimieren darf? Was mich zu der Frage bringt, darf oder <strong>muss</strong> er das in dem Fall, denn folgendes geht nicht (VC++2005), da a während der Konstruktion von a unbekannt ist?</p>
<pre><code class="language-cpp">A a( *new B(&quot;Fred&quot;, a) );
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Das ist mir schon einleuchtender, wenngleich ich Dir auch zustimme: Das sieht nicht aus als wäre es eine gute Idee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122016</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 22 Aug 2006 09:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 11:50:15 GMT]]></title><description><![CDATA[<p>Ja, ich hatte das EDIT von akari übersehen. Das es theoretisch möglich ist wurde schon gezeigt und ich finde auch kein sinnvolles Anwendungsbeispiel.</p>
<p>Hier ist meine Version, wobei man sich dann fragt, wozu bref gebraucht wird.</p>
<pre><code class="language-cpp">struct A;
struct B{
 B(A&amp;);
 A&amp; aref;
};
struct A{
A()
B b;
B&amp; bref;
};

B::B(A&amp; a):aref(a){}
A::A():b(*this),bref(b){}

int main(){
 A a;
}
</code></pre>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122037</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Tue, 22 Aug 2006 11:50:15 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 11:51:18 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ojeojeoje <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a>:<br />
Das funktioniert aber doch nur, weil der Compiler die Zuweisung zu a bei der Initialisierung zur Konstruktion optimieren darf?</p>
</blockquote>
<p>Achtung, hier ist keine Zuweisung am Werk. Das ist Copy-Initialisierung, ein entscheidener Unterschied.<br />
<a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=copyvsdirect#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=copyvsdirect#Answ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122038</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 22 Aug 2006 11:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 11:55:12 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
int main() {
	A a = *new B(&quot;Fred&quot;, a);
...
</code></pre>
<p>...</p>
</blockquote>
<p>Hi,</p>
<p>ich sehe aber nicht, dass a auf dasselbe Objekt zeigt wie B::a, oder ?<br />
Mal ganz davon abgesehen, dass ich nicht weiß, woher in diesem Beispiel der B-Ctor das &quot;a&quot; auflösen kann (wie schon vom Lord angemerkt):<br />
- IIRC &quot;verkürzt&quot; der Compiler die Kombination &quot;DefCtor+operator=()&quot; in solch einem Fall zum CpyCtor (wobei mich wundert, warum das o.a. läuft und Jaxoms Code nicht).<br />
- Auf jeden Fall aber KOPIERT er das Ergebnis vom new(...) in a mit einem automatisch erzeugten Cpy-Ctor, der natürlich auch den String mitkopiert.</p>
<p>Aber da kämst Du natürlich &quot;raus&quot; mit</p>
<pre><code class="language-cpp">...
int main() {
	A&amp; a = *new B(&quot;Fred&quot;, a);
...
</code></pre>
<p><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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122045</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 22 Aug 2006 11:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 12:20:19 GMT]]></title><description><![CDATA[<p>ein bezeichner gilt als deklariert unmittelbar nach dem letzten deklarator (insbesondere vor seinem initialisierer). in</p>
<pre><code class="language-cpp">A a = *new B(&quot;Fred&quot;, a);
</code></pre>
<p>ist der parameter a im new tatsächlich der speicherbereich des hier deklarierten objektes a - offensichtlich ist hier aber das konstruktorargument kein lebendes objekt sondern eben nur ein speicherbereich mit ausreichend platz und korrektem alignment. durch das derefenzieren erhalten wir ein lvalue vom typ B, und da A einen geeigneten konstruktor hat, der ein B&amp; nimmt, wird entweder<br />
- ein temporäres objekt mittels dieses konstruktors erstellt und anschließend a per copy-ctor durch dieses temporary konstruiert, oder<br />
- a wird direkt durch den erwähnten konstruktor erstellt<br />
welche der beiden möglichkeiten genutzt wird, ist dem compiler freigestellt.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">...
int main() {
	A&amp; a = *new B(&quot;Fred&quot;, a);
...
</code></pre>
</blockquote>
<p>B besitzt keinen geeigneten konvertierungsoperator, der ein A&amp; (oder etwas in A&amp; konvertierbares) liefert. damit ist diese initialisierung unmöglich, da das initialisieren einer referenz auf nicht konstantes T keine temporären objekte erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122067</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 12:42:35 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>ein bezeichner gilt als deklariert unmittelbar nach dem letzten deklarator (insbesondere vor seinem initialisierer). ....</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Aha, das wusste ich noch gar nicht, dass der Bezeichner schon gültig ist.</p>
<p>camper schrieb:</p>
<blockquote>
<p>...<br />
- a wird direkt durch den erwähnten konstruktor erstellt<br />
welche der beiden möglichkeiten genutzt wird, ist dem compiler freigestellt.....</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Wusste ich auch noch nicht. Ich dachte der Compilerhersteller sei zu der anderen Variante verpflichtet.<br />
Finde ich auch seltsam, dass das erlaubt ist, weil das Verhalten doch anders ist</p>
<ul>
<li>mal hat man ein temporäres Objekt, das nach dem Statement wieder abgeräumt wird (und in seinem Destruktor vielleicht Weltfrieden bringt <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="😉"
    /> ),</li>
<li>mal wird die Lebenszeit des Objekts an den scope von a gebunden (das uns in einer Endlosschleife in alle Ewigkeiten schmoren lässt).</li>
</ul>
<p>Oder gilt diese Spezialfall nur für das &quot;new&quot; ? Dann wäre aber trotzdem der Scope des erzeugten Objektes anders als der von a (nämlich länger)...</p>
<p>Nun gut, man lernt nie aus !</p>
<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">...
int main() {
	A&amp; a = *new B(&quot;Fred&quot;, a);
...
</code></pre>
</blockquote>
<p>...damit ist diese initialisierung unmöglich, da das initialisieren einer referenz auf nicht konstantes T keine temporären objekte erzeugt.[/quote]<br />
Da bin ich aber beruhigt. <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="🙂"
    /><br />
Danke für die Aufklärung.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122087</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 12:58:08 GMT]]></title><description><![CDATA[<p>Oh nö <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Dann lass ich das lieber.<br />
Ihr meint ich sollte das besser nur mit Zeigern machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122111</guid><dc:creator><![CDATA[fR4g*g*3R]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 13:28:55 GMT]]></title><description><![CDATA[<p>fR4g<em>g</em>3R schrieb:</p>
<blockquote>
<p>...Ihr meint ich sollte das besser nur mit Zeigern machen?</p>
</blockquote>
<p>Die spannende Frage lautet: Was machen ?</p>
<p>Wie gesagt: Wenn 2 Objekte (selbe Klasse oder unterschiedliche Klasse spielt keine Rolle) einander &quot;kennen&quot;, muss man sich über die Rahmenbedingungen in Klaren sein:<br />
- Was sollen sie miteinander anfangen können ?<br />
- Gehört das eine dem anderen ?<br />
- Kommt eines ohne das andere aus oder braucht es das andere zwingend ?<br />
- Wer erzeugt die Objekte ? (Der &quot;Erzeuger&quot; muß halt vorher da sein)<br />
- .....</p>
<p>Wenn Du einfach nur ein wenig mit rumspielen willst (was eine seeeehr schöne und auch lehrreiche Beschäftigung ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> ), solltest Du es einfach mal probieren mit:</p>
<pre><code class="language-cpp">class BinEinDu;
class B;

class A : public BinEinDu {
    B habeDich;
    B&amp; braucheDich;
    B* kenneDich;
    ...
};
</code></pre>
<p><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="😉"
    /><br />
Einfach mal ein paar Member-Funktionen von A schreiben, die mit den Teilen rumhantieren, sie zurückgeben, ...<br />
Da sagt einem der Compiler eigentlich schon eine Menge, was geht und was nicht.<br />
Und wenn Dir langweilig ist, streust Du noch ein paar consts ein (in die Deklaration der &quot;...Dich&quot;'s und/oder der Memberfunktionen.<br />
Da kann man sich gut und gerne ein paar Tage bis Wochen beschäftigen mit.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122140</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 22 Aug 2006 13:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 13:25:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a>:</p>
<p>Danke für den Link, aber das war mir schon klar, dass das entweder eine Copyconstruction aus einem Temporary oder eine Construction unter eliminierung des Temporary sein muss (falsch ausgedrückt).</p>
<p>Was mir jedoch nicht klar war, war dass man auf diesem Wege das Temporary eliminieren UND auf den zu initialisierenden Bezeichner zugreifen kann. Wenn ich das richtig verstehe kann man die Zeile</p>
<pre><code class="language-cpp">A a = *new B(&quot;Fred&quot;, a);
</code></pre>
<p>weder durch die direkte Initialisierung</p>
<pre><code class="language-cpp">A a( *new B(&quot;Fred&quot;, a) );
</code></pre>
<p>noch durch die Copy-Initialisierung via Temporary</p>
<pre><code class="language-cpp">A temp( *new B(&quot;Fred&quot;, &lt;nix da&gt;) );
A a( temp );
</code></pre>
<p>äquivalent darstellen. Ich dachte immer die Copy-Initialisierung ist zu mindestens einem dieser beiden äquivalent. Aber man lernt bekanntlich nie aus <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/1122142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122142</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 22 Aug 2006 13:25:11 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 13:36:30 GMT]]></title><description><![CDATA[<p>Klassenbeziehungen, wie süüs <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>
<p>Na dann üb ich mal ein bisschen, mit &quot;brauchDich&quot;, &quot;habDichLieb&quot; und soweiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f618.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_blowing_a_kiss"
      title=":*"
      alt="😘"
    /></p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Greez <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/1122158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122158</guid><dc:creator><![CDATA[dANk3R]]></dc:creator><pubDate>Tue, 22 Aug 2006 13:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 13:57:43 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a>:</p>
<p>Danke für den Link, aber das war mir schon klar, dass das entweder eine Copyconstruction aus einem Temporary oder eine Construction unter eliminierung des Temporary sein muss (falsch ausgedrückt).</p>
<p>Was mir jedoch nicht klar war, war dass man auf diesem Wege das Temporary eliminieren UND auf den zu initialisierenden Bezeichner zugreifen kann. Wenn ich das richtig verstehe kann man die Zeile</p>
<pre><code class="language-cpp">A a = *new B(&quot;Fred&quot;, a);
</code></pre>
<p>weder durch die direkte Initialisierung</p>
<pre><code class="language-cpp">A a( *new B(&quot;Fred&quot;, a) );
</code></pre>
<p>noch durch die Copy-Initialisierung via Temporary</p>
<pre><code class="language-cpp">A temp( *new B(&quot;Fred&quot;, &lt;nix da&gt;) );
A a( temp );
</code></pre>
<p>äquivalent darstellen. Ich dachte immer die Copy-Initialisierung ist zu mindestens einem dieser beiden äquivalent. Aber man lernt bekanntlich nie aus <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>kommt darauf an, was du mit äquivalent meinst. jedenfalls führt die direkte initialisierung zum selben ergebnis. unterschiede könnten sich nur ergeben, wenn bei copy-initialisierung ein temporary erzeugt wird und das irgendwelche seiteneffekte zur folge hat. du könntest ja auch</p>
<pre><code class="language-cpp">A a( A( *new B(&quot;Fred&quot;, a) ) );
</code></pre>
<p>schreiben <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/1122177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122177</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Aug 2006 13:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 14:02:14 GMT]]></title><description><![CDATA[<p>MSVC++2005 sagt sowohl zu</p>
<pre><code class="language-cpp">A a( A( *new B(&quot;Fred&quot;, a) ) );
</code></pre>
<p>als auch zu</p>
<pre><code class="language-cpp">A a( *new B(&quot;Fred&quot;, a) );
</code></pre>
<p>MSVC++2005 schrieb:</p>
<blockquote>
<p>error C2065: 'a' : undeclared identifier</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Nur die Copy-Initialisierung per Zuweisung wird akzeptiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122181</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 22 Aug 2006 14:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 14:30:08 GMT]]></title><description><![CDATA[<p>stimmt, ja. da war ich wohl selbst ein wenig konfus.</p>
<p>camper schrieb:</p>
<blockquote>
<p>ein bezeichner gilt als deklariert unmittelbar nach dem letzten deklarator (insbesondere vor seinem initialisierer).</p>
</blockquote>
<p>ist ja nur die halbe wahrheit. der initialisierer ist ja selbst ein deklarator und regel lautet</p>
<blockquote>
<p>3.3.1/1 The point of declaration for a name is immediately after its complete declarator (clause <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> and before its<br />
initializer (if any), except as noted below.</p>
</blockquote>
<p>(für die diskussion unwesentliche absätze mit ausnahmen folgen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122194</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Aug 2006 14:30:08 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 15:57:18 GMT]]></title><description><![CDATA[<p>wie kann man sich nur seitenweise darüber unterhalten wie man ein so schlechtes design umsetzen kann..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122254</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Tue, 22 Aug 2006 15:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 16:28:22 GMT]]></title><description><![CDATA[<p>Eine Referenz ist intern ein derefrenzierter Zeiger, A* a; A&amp; = *a;</p>
<pre><code class="language-cpp">struct B;
struct A
{
    B* b;
    B&amp; my_B;
    A(B* b);
};
struct B
{
    A* a;
    A&amp; my_A;
    B(A* a);
};
A::A(B* b) : b(b), my_B(*b){ if (b) b-&gt;a = this; }
B::B(A* a) : a(a), my_A(*a){ if (a) a-&gt;b = this; }

int main()
{
  A h(0); //Null-Zeiger struct B existiert noch nicht 
  B m(&amp;h);//Referenz auf h wird gebildet 
          //und h erhält eine Referenz auf m von m. 
}
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122276</guid><dc:creator><![CDATA[Helmut S.]]></dc:creator><pubDate>Tue, 22 Aug 2006 16:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Referenz on Tue, 22 Aug 2006 16:41:20 GMT]]></title><description><![CDATA[<p>Helmut S. schrieb:</p>
<blockquote>
<p>Eine Referenz ist intern ein derefrenzierter Zeiger, A* a; A&amp; = *a;</p>
<pre><code class="language-cpp">struct B;
struct A
{
    B* b;
    B&amp; my_B;
    A(B* b);
};
struct B
{
    A* a;
    A&amp; my_A;
    B(A* a);
};
A::A(B* b) : b(b), my_B(*b){ if (b) b-&gt;a = this; }
B::B(A* a) : a(a), my_A(*a){ if (a) a-&gt;b = this; }

int main()
{
  A h(0); //Null-Zeiger struct B existiert noch nicht 
  B m(&amp;h);//Referenz auf h wird gebildet 
          //und h erhält eine Referenz auf m von m. 
}
</code></pre>
<p>mfg</p>
</blockquote>
<p>undefiniertes verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122282</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Aug 2006 16:41:20 GMT</pubDate></item></channel></rss>