<?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[Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu?]]></title><description><![CDATA[<p>Wie macht ihr das, wenn ihr z.B. 2 Header Dateien habt, eine .hpp (Klasse) und eine .cpp (Methoden, Konstruktor....).</p>
<p>cllt.hpp</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;

class cllt
{
    std::string....
    std::vector....
};
</code></pre>
<p>wenn cllt.cpp nun auch &lt;string&gt; und &lt;vector&gt; benötigt, schreibt ihr es dann nochmal rein oder lasst ihrs bleiben?</p>
<p>cllt.cpp</p>
<pre><code class="language-cpp">#include &quot;cllt.hpp&quot;
#include &lt;vector&gt; // &lt;- Macht ihr das? 
#include &lt;string&gt; // &lt;-   &quot;    &quot;    &quot;

cllt::cllt(...)
{
....
}
void cllt::....
{
.....
}
</code></pre>
<p>Weil eigentlich wärs ja jetzt nicht mehr nötig?!</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204682/headerdateien-quot-inlude-quot-immer-wieder-neu</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 02:26:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204682.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Feb 2008 00:27:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 00:27:18 GMT]]></title><description><![CDATA[<p>Wie macht ihr das, wenn ihr z.B. 2 Header Dateien habt, eine .hpp (Klasse) und eine .cpp (Methoden, Konstruktor....).</p>
<p>cllt.hpp</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;

class cllt
{
    std::string....
    std::vector....
};
</code></pre>
<p>wenn cllt.cpp nun auch &lt;string&gt; und &lt;vector&gt; benötigt, schreibt ihr es dann nochmal rein oder lasst ihrs bleiben?</p>
<p>cllt.cpp</p>
<pre><code class="language-cpp">#include &quot;cllt.hpp&quot;
#include &lt;vector&gt; // &lt;- Macht ihr das? 
#include &lt;string&gt; // &lt;-   &quot;    &quot;    &quot;

cllt::cllt(...)
{
....
}
void cllt::....
{
.....
}
</code></pre>
<p>Weil eigentlich wärs ja jetzt nicht mehr nötig?!</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450188</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 06 Feb 2008 00:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 00:44:31 GMT]]></title><description><![CDATA[<p>also ich lass es weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450193</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 06 Feb 2008 00:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 01:05:40 GMT]]></title><description><![CDATA[<p>kannst weglassen, include heisst doch eh nur, pack die datei an diese stelle, also stehts nach dem preprocessing eh da ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450199</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Wed, 06 Feb 2008 01:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 03:56:24 GMT]]></title><description><![CDATA[<p>Der springende Punkt, weshalb man Programme in Module teilt, ist wiederverwendbarkeit. Beispiel:</p>
<p><code>foo.hpp</code> (braucht &lt;string&gt;)</p>
<pre><code class="language-cpp">#include &lt;string&gt;

/* ... */
</code></pre>
<p><code>bar.hpp</code> (braucht &lt;cmath&gt;)</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;

/* ... */
</code></pre>
<p><code>main.cpp</code> (braucht &lt;string&gt;</p>
<pre><code class="language-cpp">#include &quot;foo.hpp&quot;
#include &quot;bar.hpp&quot;

int main( ) {

    std::string word;

    /* ... */
}
</code></pre>
<p>Hier ist es egal, dass in <code>main.cpp</code> &lt;string&gt; nicht inkludiert wird, da main.cpp wahrscheinlich nicht wiederverwendet wird / werden kann.</p>
<p>Negativbeispiel:</p>
<p><code>foo.hpp</code> (braucht &lt;string&gt;)</p>
<pre><code class="language-cpp">/* #include &lt;string&gt; */ // &quot;Überflüssig, da vor der Einbindung in main.cpp &lt;string&gt; eingebunden wird.

/* ... */
</code></pre>
<p><code>bar.hpp</code> (braucht &lt;cmath&gt;)</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;

/* ... */
</code></pre>
<p><code>main.cpp</code> (braucht &lt;string&gt;</p>
<pre><code class="language-cpp">#include &lt;string&gt;

#include &quot;foo.hpp&quot;
#include &quot;bar.hpp&quot;

int main( ) {

    std::string word;

    /* ... */
}
</code></pre>
<p>Besteht jedoch ein Header nicht nur aus <code>inline</code> - und/oder <code>template</code> Funktionen oder Interfaces, so wird in der Regel auch eine Quellcodedatei dazugehören:</p>
<p><code>random.hpp</code></p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

unsigned long faculty( unsigned long lower, unsigned long upper );
</code></pre>
<p><code>random.cpp</code></p>
<pre><code class="language-cpp">#include &quot;random.hpp&quot;

unsigned long faculty( unsigned long lower, unsigned long upper ) {

    /* ... */
}
</code></pre>
<p>Spätestens hier ist es IM<strong>V</strong>HO ausgesprochen guter Stil, das, das benötigt wird, dort einzubinden, wo es benötigt wird.</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450207</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 06 Feb 2008 03:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 10:01:50 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Wie macht ihr das, wenn ihr z.B. 2 Header Dateien habt, eine .hpp (Klasse) und eine .cpp (Methoden, Konstruktor....).</p>
</blockquote>
<p>Ich includiere grundsätzlich so wenige Header wie möglich in anderen Headern. Wenn eine forward-Deklaration reicht, dann bring ich die und der Header zu der Klasse/Funktion wird erst in der cpp includiert.<br />
Wenn ich allerdings um das include eines Headers in meinem Header nicht herumkomme, dann brauche ich ihn in der cpp nicht nochmal einzubinden. Ein Kommentar, welche Header aus dem eigenen Header mitkommen, reicht da völlig, um die Übersicht zu haben, was in der cpp alles erreichbar ist.</p>
<p>Wenn ich feststelle, dass ich in einer Klassendefinition im privaten Teil vieles stehn hab, was die Einbindung eines Headers nötig macht, nutze ich eventuell das pimpl-Idiom, um die Abhängigkeiten zu verringern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450349</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 10:41:40 GMT]]></title><description><![CDATA[<p>In der &quot;.cpp&quot; Datei sollte es doch reichen, wenn man einfach -&gt; 'include &quot;<strong><strong>.hpp&quot;' macht?<br />
Außer in der &quot;.cpp&quot; werden Dinge verwendet die in &quot;</strong></strong>.hpp&quot; noch nicht includiert werden.<br />
Hier mal ein &quot;echtes&quot; Beispiel:</p>
<p>crypt.hpp</p>
<pre><code class="language-cpp">#include &quot;random.hpp&quot;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;

class crypt
{
    public:
    crypt(const std::string &amp;file_name);
    inline bool errorless() const;

    private:
    unsigned short code_2byte(char character);
    unsigned int code_4byte(char character);
    void create_key();
    unsigned int transform_key();

    std::vector&lt;int&gt; m_save;
    std::string m_key;
    unsigned int m_save_key[4];
    std::fstream m_file;
    const random create_value;
};
</code></pre>
<p>crypt.cpp</p>
<pre><code class="language-cpp">#include &quot;crypt.hpp&quot;
using namespace std;

crypt::crypt(const string &amp;file_name)
{
    m_file.open(file_name.c_str(), ios::out | ios::binary | ios::app);

}

inline bool crypt::errorless() const
{
    return m_file;
}

unsigned short crypt::code_2byte(char character)
{
    m_save.push_back(create_value.rnd(1,514));
    m_save.push_back(1);
    unsigned short temp=character*m_save.at(m_save.size()-1)*m_save.at(m_save.size()-2); //MAX 65278
    return temp;
}

unsigned int crypt::code_4byte(char character)
{
    m_save.push_back(create_value.rnd(1,32767));
    m_save.push_back(create_value.rnd(1,1032));
    unsigned int temp=character*m_save.at(m_save.size()-1)*m_save.at(m_save.size()-2); //MAX 4294574088
    return temp;
}

void crypt::create_key()
{
    for(int i=0;i&lt;4;++i)
    {
        char character=create_value.rnd(97,122);
        m_key +=character;
    }
}

unsigned int crypt::transform_key()
{
    for(int i=0;i&lt;4;++i)
    {
        m_save_key[i]=m_key[i]*create_value.rnd(1,8800000);
    }
    return m_save_key[0]+m_save_key[1]+m_save_key[2]+m_save_key[3];
}
</code></pre>
<p>Hättet ihr genauso includiert? Einfach die &quot;crypt.hpp&quot;?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450392</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 11:20:06 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>In der &quot;.cpp&quot; Datei sollte es doch reichen, wenn man einfach -&gt; 'include &quot;<strong><strong>.hpp&quot;' macht?<br />
Außer in der &quot;.cpp&quot; werden Dinge verwendet die in &quot;</strong></strong>.hpp&quot; noch nicht includiert werden.</p>
</blockquote>
<p>Nein, oder zumindest unschön formuliert.</p>
<p>Kurz und knapp:<br />
a) Includiere was für die Übersetzungseinheit (cpp+hpp) nötig ist<br />
b) Ziehe dabei ein Include in der Sourcedatei einem Include im Header vor<br />
c) Betrachte eine Übersetzungseinheit immer als eigenständig von Anderen</p>
<p>Includes in einem Header lassen sich in der Regel dann umgehen wenn nur Zeiger oder Referenzen in der Schnittstelle verwendet werden (Vorwärtsdeklaration). Zudem kann unter Umständen auch das Body-Handle Idiom (pImpl-Idiom) die Abhängigkeiten im Header weiter reduzieren.</p>
<p>Nehmen wir deinen Code als Beispiel, und modifizieren ihn soweit das die Abhängigkeiten so minimal wie möglich sind (stark gekürzt und ungetestet, zumal ich den Code eh etwas anders schreiben würde):</p>
<pre><code class="language-cpp">#if !defined(CRYPT_HEADER)
#define CRYPT_HEADER

#include &lt;boost/smart_ptr.hpp&gt;

// Vorwärtsdeklarationen
namespace std
{
  class string;
}

class crypt
{
    public:
      crypt(std::string const &amp; file_name);
      inline bool errorless() const;

    private:
      // Handle-Body Idiom
      struct cryptImpl;
      boost::scoped_ptr&lt;cryptImpl&gt; Impl;

      // Kopierkonstruktor und Zuweisungsoperator habe ich nur zur
      // Vereinfachung ausgeschlossen, ansonsten wären diese
      // entsprechend zu formulieren (Kopie des Inhaltes des
      // Smartpointers...)
      crypt(crypt const &amp;);
      crypt&amp; operator=(crypt const &amp;);

      unsigned short code_2byte(char character);
      unsigned int code_4byte(char character);
      void create_key();
      unsigned int transform_key();
};

#endif
</code></pre>
<p>Source habe ich mal gekürzt und nur Ausschnittsweise umgesetzt.</p>
<pre><code class="language-cpp">#include &quot;crypt.hpp&quot;
#include &quot;random.hpp&quot;

#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;

using namespace std;

struct crypt::Implementation
{
  vector&lt;int&gt; Save; // Was soll m_save etc. aussagen? Sprechende Namen...
  string Key;
  unsigned int SaveKey[4];
  fstream File;
  const random create_value;

  Implementation(string const &amp; file_name)
  : Save(),
    Key(&quot;&quot;),
    File(),
    CreateValue()
  {
    File.open(file_name.c_str(), ios::out | ios::binary | ios::app);
  }
};

crypt::crypt(string const &amp; file_name)
: Impl(new crypt::cryptImpl(file_name))
{
}

inline bool crypt::errorless() const
{
  return Impl-&gt;File;
}
...
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450424</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 11:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 11:47:20 GMT]]></title><description><![CDATA[<p>Ich meine mal gelesen zu haben dass die Vorwärtsdeklaration von String nicht funktioniert, weil string keine Klasse sondern ein typedef auf std::basic_string&lt;char&gt; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450451</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Feb 2008 11:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 12:46:35 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich meine mal gelesen zu haben dass die Vorwärtsdeklaration von String nicht funktioniert, weil string keine Klasse sondern ein typedef auf std::basic_string&lt;char&gt; ist.</p>
</blockquote>
<p>Möchte ich nicht ausschließen, dann wäre es ein zusätzliches Include im Header. Arbeite leider nur privat mit der STL und hatte bisher eigentlich immer den Fall das wenn ich einen String im Header verwendet habe, auch eine Methode mit einer Stringrückgabe (Kopie) existierte - und ich somit eh das Include brauchte.</p>
<p>Aber was mir wichtiger war zu zeigen das man viele Includes (wenn auch nicht alle) im Header umgehen kann.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450500</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 12:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 13:00:15 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a><br />
Warum soll ich meine ganzen Elementvariablen in einem &quot;struct&quot; zusammenfassen?<br />
Und was genau ist das hier:</p>
<pre><code class="language-cpp">namespace std
{
  class string;
}
</code></pre>
<p>? Und das hier:</p>
<pre><code class="language-cpp">boost::scoped_ptr&lt;cryptImpl&gt; Impl;
</code></pre>
<p>?</p>
<p>MfG<br />
Stromberg</p>
<p>PS: Wenn mein Code fertig ist, dann mach ich noch einen Thread auf in dem ihr mir sagen könnt was ich alle falsch gemacht habe....weil hier ging es ja jetzt eigentlich um die Header...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450517</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 06 Feb 2008 13:00:15 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 13:14:38 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a><br />
Und was genau ist das hier:</p>
<pre><code class="language-cpp">namespace std
{
  class string;
}
</code></pre>
</blockquote>
<p>Eine Vorwärtsdeklaration, die wie wir jetzt geklärt haben aber bei std::string leider nicht funktioniert. Aber eine weitere Vorwärtsdeklaration ist aber im private-Teil der Klasse zu sehen (die berüchtigte Struktur).</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>Warum soll ich meine ganzen Elementvariablen in einem &quot;struct&quot; zusammenfassen?</p>
</blockquote>
<p>Such mal im Netz nach dem Begriff &quot;Handle-Body&quot; &quot;Body-Handle&quot; oder &quot;pImpl&quot; <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>Kurz zusammengefasst: Ich habe hier zwar absichtlich die Extremumsetzung zeigen wollen, aber grundsätzlich sehe ich 2 Vorteile (Wenn man den Overhead/Indirektion als Nachteil akzeptiert):<br />
1. Reduzierung der Linkzeiten<br />
2. Erhöhung der Lesbarkeit des Headers (Implementierungsdetails außen vor lassen; Ich lese grundsätzlich den Header wenn ich Code überschauen muss... wie die Klasse implementiert ist interessiert mich nur wenn Fehler zu korrigieren oder Anpassungen vorzunehmen sind)</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>? Und das hier:</p>
<pre><code class="language-cpp">boost::scoped_ptr&lt;cryptImpl&gt; Impl;
</code></pre>
</blockquote>
<p>Dies ist ein Smartpointer auf die Implementierungsstruktur, wobei ich hier beispielsweise mich auf die Smartpointer der (empfehlenswerten) Boost-Bibliothek beziehe. Gibt aber auch vergleichbares im TR1.</p>
<p>Alternativ hätte es auch ein Zeiger getan den man im Destruktor löscht, nur sind Smartpointer einfach sicherer.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450530</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 13:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 14:10:09 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Alternativ hätte es auch ein Zeiger getan den man im Destruktor löscht, nur sind Smartpointer einfach sicherer.</p>
</blockquote>
<p>Allerdings brauchst du dann trotzdem einen eigenen Destruktor für crypt:<br />
crypt::~crypt wird in allern ÜEs definiert, die dies benötigen; in allen ÜEs außer der, in der sich die Implementation befindet, ist cryptImpl aber unvollständig, die Instantiierung des Destruktors des scoped_ptr dort daher ein Fehler (die boost-Dokumentation ist sehr deutlich - denn der Destruktor von crptyImpl würde nicht aufgerufen werden, nur ein shared_ptr wäre möglich), auch mit aut_ptr sieht es nicht anders aus: dort ist die bloße Definition in der Klasse bereits undefiniert.<br />
Aus diesen Gründen sollte dieses Idiom nicht (oder nur mit Vorbedacht) mit Smartpointern umgesetzt werden - diese haben in diesem speziellen Fall ohnehin keinen Vorteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450585</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 06 Feb 2008 14:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 14:48:39 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Alternativ hätte es auch ein Zeiger getan den man im Destruktor löscht, nur sind Smartpointer einfach sicherer.</p>
</blockquote>
<p>Allerdings brauchst du dann trotzdem einen eigenen Destruktor für crypt:<br />
crypt::~crypt wird in allern ÜEs definiert, die dies benötigen; in allen ÜEs außer der, in der sich die Implementation befindet, ist cryptImpl aber unvollständig...</p>
</blockquote>
<p>Sprich: Die automatisch generierten Destruktoren können unter Umständen etwas anderes machen wenn man sie nicht selbst (und sei es leer) definiert?</p>
<p>Okay, das war mir nicht bewusst. Aber man lernt niemals aus (Wobei ich dann zumindest privat nicht darüber stoßen würde, da ich Destruktoren privat aus reiner Gewohnheit immer definiere).</p>
<p>Das hier die Smartpointer an sich nicht unbedingt nötig sind ist mir auch bewusst, ich wollte nur das Extrembeispiel nennen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450612</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 14:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 15:15:52 GMT]]></title><description><![CDATA[<p>Äh was genau ist den so ein &quot;smartpointer&quot;? Was bringt mir des auf das struct einen Zeiger zu legen....?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450643</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 06 Feb 2008 15:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 16:00:08 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Äh was genau ist den so ein &quot;smartpointer&quot;? Was bringt mir des auf das struct einen Zeiger zu legen....?</p>
</blockquote>
<p>Beginnen wir bei Smartpointern:</p>
<p>Ein Smartpointer ist ein Objekt das sie fast wie ein Zeiger verhält, aber um die Speicherfreigabe kümmtert. Es gibt verschiedene Formen hiervon. Die einfachen (wie scoped_ptr) übernehmen im wesentlichen nur den Aufruf von delete am Ende ihrer Lebenszeit.</p>
<p>Minibeispiel:</p>
<pre><code class="language-cpp">#include &lt;boost/smart_ptr.hpp&gt;

void foo1()
{
  scoped_ptr&lt;int&gt; value(new int(4));
} // &lt;-- hier wird der Wert automatisch gelöscht

void foo2()
{
  int* value = new int(4);
  delete value; // hier muss es manuell erfolgen
}
</code></pre>
<p>Was ist an sich der Vorteil? Nehmen wir mal an das die Funktion länger ist und mehrere Austritspunkte (return/exception...) hat. Bei ein Zeiger müsstest du in jeden Fall dann extra ein delete schreiben, beim Smartpointer wird dies (unabhängig wo die Methode beendet wird) automatisch durch seinen Destruktor gemacht.</p>
<p>Dann gibt es aber noch die komplizierteren wie shared_ptr die Referenzzählung betreiben und sich so direkt nicht durch Zeiger simulieren lassen. Der Sinn hiervon ist, das man diese Kopieren kann, und erst mit dem löschen der letzten Smartpointerinstanz der Zeiger gelöscht wird. Was man vermeiden muss ist aber das Objekte sich dabei gegenseitig am Leben halten.</p>
<p>Warum nun einen Zeiger im Header auf die Struktur?</p>
<p>Man kann Zeiger und Referenzen im Gegensatz zu Werten ohne Kenntnis ihres genauen Typs definieren (Stichwort: Vorwärtsdeklaration). Erst mit dem Zugriff auf den Wert muss der Typ bekannt sein.</p>
<p>Minibeispiel:</p>
<pre><code class="language-cpp">// foo.h (Includeguards etc. als Beispiel weggelassen)
class A;                  // &lt;-- nur Vorwärtsdeklaration
void foo(const A&amp; value); // &lt;-- Hier kein genauer Typ nötig

// cpp
#include &quot;foo.h
#include &quot;A.h&quot; // s.u.

void foo(const A&amp; value)
{
  A-&gt;foo(); // Hier wird zugegriffen, daher Typ nötig (und daher include)
}
</code></pre>
<p>Man sollte an sich möglichst wenig includes im Header machen (wegen Compilezeiten), daher Zeiger/Referenzen und Vorwärtsdeklarationen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450682</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 16:00:08 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 16:35:58 GMT]]></title><description><![CDATA[<p>Na, wir haben doch im Magazin einen ausführlichen Smart-Pointer-Artikel. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Lest ihr das Magazin nicht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1450700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450700</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 06 Feb 2008 16:35:58 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Wed, 06 Feb 2008 16:59:46 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Na, wir haben doch im Magazin einen ausführlichen Smart-Pointer-Artikel. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Lest ihr das Magazin nicht <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>
</blockquote>
<p>Lesen oder Überfliegen schon, aber immer daran denken: nein ;p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450711</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Feb 2008 16:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 00:48:44 GMT]]></title><description><![CDATA[<p>Ik mach die ganzen Scherze mit dem Zeiger nur das meine Compilierzeit kürzer wird, wa? Mehr bringt mir das nischt?<br />
Ich mein, wenn da eine &quot;include&quot; Datei mehr oder weniger im Header drinsteht, dann is es halt eine hunfertstel sekunde langsamer...aber des kann einem doch egal sein oder? Auf was es doch zum Schluss ankommt, dass ist doch die &quot;.exe&quot; oder &quot;.o&quot; Datei, und die sind dadurch ja nicht langsamer oder?<br />
Aber mir is es glaub eigentlich egal, ob ich 1sek oder 6sek compiliere. Oder gibts da noch größere Zeitunterschied?<br />
Wenns mal n Unterschied zwischen 10sek und 10std is, okay, dann überleg ichs mir nochmal <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>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450956</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 07 Feb 2008 00:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 07:42:35 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Wenns mal n Unterschied zwischen 10sek und 10std is, okay, dann überleg ichs mir nochmal <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>
</blockquote>
<p>Nur als grobe Angabe mal in den Raum geschmissen: An der Arbeit habe ich bei Teilprojekten Linkzeiten von bis zu 8 Minuten. Das Gesamtprojekt linkt in nicht weniger als 2-3 Stunden.</p>
<p>Okay, die Entwicklungsumgebung ist eh nicht wirklich gut, aber es gibt irgendwann dennoch Größenordnungen wo man darüber nachdenkt.</p>
<p>cu Andé</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450993</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 07 Feb 2008 07:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 10:30:31 GMT]]></title><description><![CDATA[<p>Okay, da hab ihr dann aber doch auch so 100000 Zeilen Code oder? Was für eine IDE benutzt ihr den da? Was für IDE's benutzt man für so große Projekte, und was für n Compiler? würd mich ma interessieren.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451077</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 07 Feb 2008 10:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 10:49:08 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Okay, da hab ihr dann aber doch auch so 100000 Zeilen Code oder? Was für eine IDE benutzt ihr den da? Was für IDE's benutzt man für so große Projekte, und was für n Compiler? würd mich ma interessieren.</p>
</blockquote>
<p>Es sind zwei IDE's/Compiler (was besonders die Kommunikation erschwert) und beides sind Dinosaurier... Ansi C++, STL? Wäre schön. Der eine ist Visual Studio 6.0 Professionell, der andere eine schon mehr als 8 Jahre lang eingestellte Rad-Umgebung von Sybase, daher keine Erwähnung wert.</p>
<p>Wenn ich es neu aufsetzen würde, wäre die Umgebung wohl (wegen den Anforderungen, und Rahmenbedingungen) Visual Studion 2008 Prof (oder höher) mit C# und C++/CLI oder rein auf C++ Basis (wohl dann mit der MFC auch wenn ich persönlich die MFC eher verabscheue).</p>
<p>Das Projekt dürfte so in der Größenordung um die 10 Millionen Zeilen Code liegen, und je nach dem ob man externe Komponenten und Reports zurechnet ist das fertige Programm zwischen 90 und 390 MB groß...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451090</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 07 Feb 2008 10:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 10:53:41 GMT]]></title><description><![CDATA[<p>Naja, man kompiliert ja nicht jedesmal das komplette Projekt, wenn man eine Änderung macht. Meistens macht man Änderungen in der Implementierung (.cpp) und dann wird nur diese eine Datei kompiliert. Passiert eine Änderung im Header, kompiliert natürlich mehr. Kommt also darauf an, ob man viel in Headern ändert.</p>
<p>Achja, man kann auch die Zeit verkürzen, in dem man PCHs benutzt.</p>
<p>Das Linken kann man verkürzen, in dem man viel in dynamisch gelinkte Libs auslagert. Usw. usf. Also 2 bis 3 Stunden für eine EXE halte ich irgendwie für komisch. Für ein gesamtes Projekt (mehrere Libs usw.) ist es aber verständlich. Aber ändert man immer in allen Projekten gleichzeitig was? Habe die Erfahrung gemacht, das man immer nur in ganz bestimmten Teilprojekten aktiv ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451094</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 07 Feb 2008 10:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 11:19:52 GMT]]></title><description><![CDATA[<p>Was hier ordentlich Zeit spart ist ein Shared Repository mit Nightly Builds dessen Objektdateien immer dann verwendet werden, wenn lokal keine Änderungen vorliegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451108</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 07 Feb 2008 11:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 12:05:30 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Das Linken kann man verkürzen, in dem man viel in dynamisch gelinkte Libs auslagert. Usw. usf. Also 2 bis 3 Stunden für eine EXE halte ich irgendwie für komisch. Für ein gesamtes Projekt (mehrere Libs usw.) ist es aber verständlich.</p>
</blockquote>
<p>Ich habe auch nie was anderes gesagt (Gesamtprojekt nicht unter 2-3 Stunden). Die Einzelprojekte (überwiegend dll's linken in maximal 8 Minuten, wobei die IDE manchmal meint erstmal wegen einer winzigen Änderung an der UI 5+ Minuten in 100% Auslastung verfallen zu müssen...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451149</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 07 Feb 2008 12:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 12:45:20 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>...wobei die IDE manchmal meint erstmal wegen einer winzigen Änderung an der UI 5+ Minuten in 100% Auslastung verfallen zu müssen...</p>
</blockquote>
<p>Meine nicht, dass das mit Visual Studio 2005+ besser würde <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>
<p>-scnr-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451172</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 07 Feb 2008 12:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Headerdateien &amp;quot;inlude&amp;quot; immer wieder neu? on Thu, 07 Feb 2008 13:17:43 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>...wobei die IDE manchmal meint erstmal wegen einer winzigen Änderung an der UI 5+ Minuten in 100% Auslastung verfallen zu müssen...</p>
</blockquote>
<p>Meine nicht, dass das mit Visual Studio 2005+ besser würde <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>
</blockquote>
<p>In VC2005+ bin ich aber je nach Sprache aber auch etwas flexibler mit den Designern (z.B. gebe ich persönlich XAML bei WPF unter C# eh händisch ein xD). Zu dem MFC und WinForms Designer kann ich aber nichts sagen. Das letzte mal das ich mit dem MFC Designer etwas gemacht habe war zu VC 1.5 Zeiten...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451198</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 07 Feb 2008 13:17:43 GMT</pubDate></item></channel></rss>