<?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[Stilfrage Pointer vs. Referenz im Objekt speichern]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>angenommen man hat eine Klasse, die einen Pointer auf ein anderes Objekt hält. Der Pointer darf nicht 0 sein, und soll nach dem Erstellen auch nicht mehr verändert werden, also könnte man eigentlich eine Referenz nutzen. Nur sind Referenzen irgendwie so vorbelastet. (Damit, dass sie nicht gehalten und später genutzt werden.) Ich schreibe einfach mal Beispielcode, dann wird klarer was ich möchte:</p>
<p>Möglichkeit 1:</p>
<pre><code class="language-cpp">class A
{
  const B *b_;
public:
  A(const B *b)
    : b_(b)
  {}
};
</code></pre>
<p>Möglichkeit 2:</p>
<pre><code class="language-cpp">class A
{
  const B &amp;b_;
public:
  A(const B &amp;b)
    : b_(b)
  {}
};
</code></pre>
<p>Wie macht man also möglichst elegant klar, dass die Referenz/der Pointer in der Klasse gespeichert und später genutzt wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296057/stilfrage-pointer-vs-referenz-im-objekt-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 05:56:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296057.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Nov 2011 11:45:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stilfrage Pointer vs. Referenz im Objekt speichern on Sun, 27 Nov 2011 11:45:56 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>angenommen man hat eine Klasse, die einen Pointer auf ein anderes Objekt hält. Der Pointer darf nicht 0 sein, und soll nach dem Erstellen auch nicht mehr verändert werden, also könnte man eigentlich eine Referenz nutzen. Nur sind Referenzen irgendwie so vorbelastet. (Damit, dass sie nicht gehalten und später genutzt werden.) Ich schreibe einfach mal Beispielcode, dann wird klarer was ich möchte:</p>
<p>Möglichkeit 1:</p>
<pre><code class="language-cpp">class A
{
  const B *b_;
public:
  A(const B *b)
    : b_(b)
  {}
};
</code></pre>
<p>Möglichkeit 2:</p>
<pre><code class="language-cpp">class A
{
  const B &amp;b_;
public:
  A(const B &amp;b)
    : b_(b)
  {}
};
</code></pre>
<p>Wie macht man also möglichst elegant klar, dass die Referenz/der Pointer in der Klasse gespeichert und später genutzt wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149506</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage Pointer vs. Referenz im Objekt speichern on Sun, 27 Nov 2011 12:01:15 GMT]]></title><description><![CDATA[<p>Wenn, wie du sagst, der Pointer nie NULL sein darf und nicht verändert werden darf, bedeutet das zusammen genommen, dass das Objekt, auf das verwiesen wird, eine längere Lebensdauer haben muss als das Objekt, das die Referenz/Pointer hält. Andernfalls hast du sowohl beim Pointer als auch bei der Referenz das gleiche Problem, nämlich dass sie ins Nirvana verweisen.<br />
Wenn das mit der Lebenszeit gegeben ist, würde ich eine Referenz nehmen. Andernfalls würde ich einen weak_ptr in Betracht ziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149517</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage Pointer vs. Referenz im Objekt speichern on Sun, 27 Nov 2011 12:28:05 GMT]]></title><description><![CDATA[<p>Wenn der Besitz des Objekts ganz klar ausserhalb dieser Klasse festgelegt ist, mach ich das meist so</p>
<pre><code class="language-cpp">class A
{
  const B* b_;
public:
  A(const B&amp; b)
    : b_(&amp;b)
  {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2149531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149531</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:28:05 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage Pointer vs. Referenz im Objekt speichern on Sun, 27 Nov 2011 12:36:29 GMT]]></title><description><![CDATA[<p>Die Diskussion gabs schon etliche Male, im Prinzip gibt es zwei Lager:</p>
<p><strong>Hauptsächlich Verwendung von Zeigern</strong></p>
<ul>
<li><code>T, const T&amp;</code> : Lesezugriff</li>
<li><code>T*</code> : Schreibzugriff, Adresse speichern</li>
<li><code>const T*</code> : Adresse speichern</li>
</ul>
<p>Vorteil: Veränderung/Speicherung im Aufrufcode sichtbar<br />
Nachteil: Kein Einsatzgebiet für Non-Const-Referenzen, ständige Dereferenzierung notwendig</p>
<p><strong>Hauptsächlich Verwendung von Referenzen</strong></p>
<ul>
<li><code>T, const T&amp;</code> : Lesezugriff</li>
<li><code>T&amp;</code> : Schreibzugriff, Adresse speichern</li>
<li><code>T*</code> : Schreibzugriff ( <code>NULL</code> erlaubt), Adresse speichern</li>
<li><code>const T*</code> : Lesezugriff ( <code>NULL</code> erlaubt), Adresse speichern</li>
</ul>
<p>Vorteil: Schnittstelle gibt Auskunft darüber, ob Nullzeiger erlaubt sind<br />
Nachteil: Im Aufrufcode ist Schreibzugriff/Speicherung nicht direkt erkennbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149535</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:36:29 GMT</pubDate></item></channel></rss>