<?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[d-pointer: Welche Vorteile?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin eben durch Zufall auf folgenden Artikel über d-pointer aufmerksam geworden:</p>
<p><a href="http://www.heise.de/developer/artikel/C-Vor-und-Nachteile-des-d-Zeiger-Idioms-Teil-1-1097781.html" rel="nofollow">http://www.heise.de/developer/artikel/C-Vor-und-Nachteile-des-d-Zeiger-Idioms-Teil-1-1097781.html</a></p>
<p>Ich muss leider gestehen, da ich die Vorteile nicht so recht verstehe und hoffe das mir da jemand helfen kann.</p>
<p>Die Fragen die sich mir stellen:</p>
<p>- Bei d-pointern muss ich die Methoden sogar doppelt deklarieren (Hauptklasse und private Klasse), was ich eher als erheblichen Nachteil ansehe. Wo ist da der Vorteil?</p>
<p>- Dann habe ich das mit dem &quot;Modulkonzept&quot; nicht so recht verstanden. Was ist da gemeint worden?</p>
<p>- Ist das nicht sogar eher eine Art Template-Method-Pattern bzw. Proxy-Pattern? Wenn ja: Wo ist da der genaue tiefgreifende Unterschied?</p>
<p>Hoffe mir kann da jemand etwas Klarheit geben. <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/275882/d-pointer-welche-vorteile</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 15:59:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275882.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Oct 2010 11:15:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 11:15:54 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin eben durch Zufall auf folgenden Artikel über d-pointer aufmerksam geworden:</p>
<p><a href="http://www.heise.de/developer/artikel/C-Vor-und-Nachteile-des-d-Zeiger-Idioms-Teil-1-1097781.html" rel="nofollow">http://www.heise.de/developer/artikel/C-Vor-und-Nachteile-des-d-Zeiger-Idioms-Teil-1-1097781.html</a></p>
<p>Ich muss leider gestehen, da ich die Vorteile nicht so recht verstehe und hoffe das mir da jemand helfen kann.</p>
<p>Die Fragen die sich mir stellen:</p>
<p>- Bei d-pointern muss ich die Methoden sogar doppelt deklarieren (Hauptklasse und private Klasse), was ich eher als erheblichen Nachteil ansehe. Wo ist da der Vorteil?</p>
<p>- Dann habe ich das mit dem &quot;Modulkonzept&quot; nicht so recht verstanden. Was ist da gemeint worden?</p>
<p>- Ist das nicht sogar eher eine Art Template-Method-Pattern bzw. Proxy-Pattern? Wenn ja: Wo ist da der genaue tiefgreifende Unterschied?</p>
<p>Hoffe mir kann da jemand etwas Klarheit geben. <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/1969042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969042</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 11:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 11:21:30 GMT]]></title><description><![CDATA[<p>Nein, in die private Klassen (die IMPL-Klasse) kommen alle Daten, und je nach Geschmack auch Methoden, die du ohne Pimpl auch private gemacht hättest. Deshalb hast du auch keine Interface-Duplizierung und auch kein Proxy.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969047</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 22 Oct 2010 11:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 11:53:05 GMT]]></title><description><![CDATA[<p>Aber ich muss doch in der Hauptklasse die von außen aufrufbare Methode implementieren und darin die Weiterleitung zur eigentlichen Implementierung in die private Klasse. Für mich klingt das nach einem Proxy oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969070</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 11:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:02:53 GMT]]></title><description><![CDATA[<p>EasyCoder schrieb:</p>
<blockquote>
<p>Aber ich muss doch in der Hauptklasse die von außen aufrufbare Methode implementieren und darin die Weiterleitung zur eigentlichen Implementierung in die private Klasse. Für mich klingt das nach einem Proxy oder?</p>
</blockquote>
<p>Die von außen aufrufbaren Methoden sollen ja auch nicht durchgeleitet werden. Es geht nur darum die privaten Sachen zu verbergen. Die öffentlichen Methoden implementierst du ganz normal, wie du es sonst auch machen würdest. Sie dürfen(und in der Regel müssen) natürlich auch Methoden aus der privaten Klasse benutzen, aber dadurch ändert sich doch nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969075</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:02:53 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:33:15 GMT]]></title><description><![CDATA[<p>Nur ein kleines Beispiel.<br />
Ohne Pimpl:</p>
<pre><code class="language-cpp">class Test {
public:
  void insert(int n);
private:
  std::vector&lt;int&gt; elems_;
  bool accept(int n);
};
void Test::insert(int i) {
  if(accept(i)) elems_.push_back(i);
}

bool Test::accept(int i) {
  return i != 0;
}
</code></pre>
<p>mit pimpl:</p>
<pre><code class="language-cpp">class Test {
public:
  void insert(int n);
private:
  struct Impl;
  Impl* d;
};

struct Test::Impl {
  std::vector&lt;int&gt; elems_;
  bool accept(int i);
};  

void Test::insert(int i) {
  if(d-&gt;accept(i)) d-&gt;elems_.push_back(i);
}

bool Test::Impl::accept(int i) {
  return i != 0;
}
</code></pre>
<p>Du siehst, der Code ist immer noch der selbe, bis auf den kleinen Unterschied, dass in Test der private-Teil anders ausschaut, und bei der Verwendung der vorher privatenElemente jetzt ein zusätzliches &quot;d&quot; steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969089</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:37:25 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20104">@l</a>'abra d'or<br />
Danke für das Beispiel!</p>
<p>Die Frage die sich mir einfach stellt, wo soll gerade bei sowas der Vorteil sein? Ich seh da (leider) bisher keinen praktischen oder theoretischen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Einfach die Frage: Warum benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969091</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:41:04 GMT]]></title><description><![CDATA[<p>EasyCoder schrieb:</p>
<blockquote>
<p>Einfach die Frage: Warum benutzen?</p>
</blockquote>
<p>Steht in dem Artikel genau beschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969093</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:41:04 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:42:28 GMT]]></title><description><![CDATA[<p>@Shade Of Mine<br />
Wie schon gesagt habe ich es nicht genau verstanden, drum die Frage ob es mir jemand verdeutlichen könnte und nicht einfach sagt: &quot;Ist so!&quot;.</p>
<p>Sorry, bin keiner der 10 Jahre beruflich C++ programmiert. Darum frage ich ja!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969094</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:45:58 GMT]]></title><description><![CDATA[<p>Wenn Du als Beispiel eine Library (statisch oder dynamisch) erstellst und die Implementation verstecken willst oder haufenweise private Member hast, die im Header nicht auftauchen sollen oder dürfen wegen Implementationsdetails und ähnlichem. Oder auch nur um Vervollständigungsmechanismen zu entlasten.<br />
Gibt viele Möglichkeiten.<br />
Oder um eine Implementation schnell austauschen zu können bei Bedarf.</p>
<pre><code class="language-cpp">class IMyInterface
{
public:
   virtual void foobar() = 0;
};

class MyInterfaceImpl : public IMyInterface
{
public:
   virtual void foobar();
};

class MyInterface
{
public:
   MyInterface( IMyInterface* p )
   {
      m_pImpl = p;
   }

   virtual void foobar()
   {
      m_pImpl-&gt;foobar();
   }
private:
   IMyInterface* m_pImpl;
};
</code></pre>
<p>So als kleines Beispiel. So kann der User der Library seine eigene Implementation einbauen.</p>
<p>edits: was korrigiert :p nicht mein tag heute :S<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969097</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:49:14 GMT]]></title><description><![CDATA[<p>Primärvorteil: Kompilierungszeit verkürzen. Einfach durch Entfernung von Abhängigkeiten im Header.<br />
Das obige Beispiel hätte einen &quot;#include &lt;vector&gt;&quot; direkt im Header gebraucht. Jede Übersetzungseinheit, die den test.h-Header einbindet, bindet automatisch std::vector ein. Das führt zu erhöhter Kompilierzeit.<br />
Durch das Pimpl braucht es den #include erst in der Dateie, in der Test::Impl definiert wird (üblicherweise test.cpp, wo also auch Methoden von Test definiert werden). Damit beschleunigt sich der Kompiliervorgang aller Einheiten, die test.h einbinden. Vor allem wenn sich etwas in Test::Impl ändert, muss nicht alles neu kompiliert werden (Für mal ohne Pimpl ein neues Datenelement hinzu, und schau wie alles neu kompiliert werden muss).</p>
<p>Sekundärvorteil: Bei Änderungen der Daten (Hinzufügen, Entfernen, umsortieren von Datenelementen) ändert sich die Binärschnittstelle (ABI) nicht. Man kann also eine Lib aktualisieren, ohne alle verwendenene Applikationen neu übersetzen zu müssen.</p>
<p>Herb Sutter hat in &quot;Exceptional C++&quot; einiges darüber geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969103</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:50:41 GMT]]></title><description><![CDATA[<p>@Scorcher24<br />
Vielen Dank! Das war mal ein sehr sinnvolles Beispiel das mir den Nutzen mal richtig verdeutlicht hat. <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>Schade, das sowas nicht von dem Mod kommt, sondern nur sowas nutzloses &quot;Steht doch da&quot; und man den Wald vor lauter Bäumen nicht sieht.</p>
<p>Drum: <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="👍"
    /> Scorcher24 <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1969105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969105</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:54:40 GMT]]></title><description><![CDATA[<p>EasyCoder schrieb:</p>
<blockquote>
<p>Wie schon gesagt habe ich es nicht genau verstanden, drum die Frage ob es mir jemand verdeutlichen könnte und nicht einfach sagt: &quot;Ist so!&quot;.</p>
</blockquote>
<p>Men reduziert damit Abhängigkeiten.</p>
<p>Siehe ähnliche Artikel:<br />
<a href="http://www.gotw.ca/gotw/024.htm" rel="nofollow">http://www.gotw.ca/gotw/024.htm</a><br />
<a href="http://www.gotw.ca/publications/mill05.htm" rel="nofollow">http://www.gotw.ca/publications/mill05.htm</a><br />
<a href="http://www.gotw.ca/publications/mill04.htm" rel="nofollow">http://www.gotw.ca/publications/mill04.htm</a></p>
<p>PS:<br />
mit steht da, meine ich zB dieses Beispiel:</p>
<blockquote>
<p>So hat Nokias &quot;Qt Development Frameworks&quot;-Abteilung (vormals Trolltech) bei der Klassenbibliothek &quot;Qt 4&quot; bei mindestens zwei Gelegenheiten tiefgreifende Änderungen am Widget-Rendering durchgeführt, ohne dass die Qt 4 benutzenden Programme hierfür auch nur neu gebunden hätten werden müssen.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1969106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969106</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to d-pointer: Welche Vorteile? on Fri, 22 Oct 2010 12:51:54 GMT]]></title><description><![CDATA[<p>Dickes Danke natürlich auch an l'abra d'or <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/1969107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969107</guid><dc:creator><![CDATA[EasyCoder]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:51:54 GMT</pubDate></item></channel></rss>