<?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[Tracer-Klasse Vorstellung]]></title><description><![CDATA[<p>Da es relativ viel Code ist wollte ich hier nicht alles in Tags packen und euch hier zeigen, sondern ich habe das ganze mal hochgeladen, und würde mich echt darüber freuen wenn sich die ein oder anderen Zeit nemen könnten und sich das mal ansehen könnten, und mir nützliche Tips geben kann, wie man was anders machen kann oder was noch dazu machen könnte.</p>
<p>Das ganze ist ein C::B Projekt.</p>
<p><a href="http://uploaded.to/?id=hhaxix" rel="nofollow">http://uploaded.to/?id=hhaxix</a></p>
<p>Ansonsten noch einen angenehmen Sonntag Abend.</p>
<p>Edit: Ein wenig Hilfe habe ich aus dem Breymann genommen, naja eigentlich relativ viel, wollte es trotzdem mal vorstellen.</p>
<p>EDIT:<br />
NUMMERIERTESOBJEK_H_INCLUDED.h</p>
<pre><code class="language-cpp">#ifndef NUMMERIERTESOBJEK_H_INCLUDED
#define NUMMERIERTESOBJEK_H_INCLUDED

#include&lt;iostream&gt;
#include&lt;cstdlib&gt;
class NummeriertesObjekt
{
    private:
        static int anzahl;
        static unsigned long maxNummer;
        const unsigned long SerienNr;

    public:
        NummeriertesObjekt();
        NummeriertesObjekt(const NummeriertesObjekt&amp;);
        ~NummeriertesObjekt();
        unsigned long Seriennummer()const { return SerienNr;}
        static int Anzahl() {return anzahl;}
        static bool Testmodus;
};

#endif // NUMMERIERTESOBJEK_H_INCLUDED
</code></pre>
<p>NUMMERIERTESOBJEK_H_INCLUDED.cpp</p>
<pre><code class="language-cpp">#include &quot;NummeriertesObjek.h&quot;

int           NummeriertesObjekt::anzahl = 0;
unsigned long NummeriertesObjekt::maxNummer = 0L;
bool          NummeriertesObjekt::Testmodus = false;

NummeriertesObjekt::NummeriertesObjekt() : SerienNr(++maxNummer)
{
    ++anzahl;
    if(Testmodus)
    {
        if(SerienNr == 1)
        {
            std::cout&lt;&lt;&quot;Start der Objekterzeugung&quot;&lt;&lt;std::endl;
            std::cout&lt;&lt;&quot;Objekt Nr. &quot;&lt;&lt;SerienNr&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
        }
    }
}
NummeriertesObjekt::NummeriertesObjekt(const NummeriertesObjekt &amp;numobj) : SerienNr(++maxNummer)
{
    ++anzahl;
    if(Testmodus)
    {
        std::cout&lt;&lt;&quot;Objekt Nr. &quot;&lt;&lt;SerienNr&lt;&lt;&quot; mit Nr. &quot;&lt;&lt;numobj.Seriennummer()&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
    }
}
NummeriertesObjekt::~NummeriertesObjekt()
{
    --anzahl;
    if(anzahl &lt; 0)
    {
           assert(anzahl &gt;=0);
    }

}
</code></pre>
<p>TRACER_H_INCLUDED.h</p>
<pre><code class="language-cpp">#ifndef TRACER_H_INCLUDED
#define TRACER_H_INCLUDED
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;..\NumObj\NummeriertesObjek.h&quot;

class Tracer : public NummeriertesObjekt
{
    private:
        static std::vector&lt;Tracer*&gt; tracervec;
        const std::string tracename;

    public:
        Tracer(const std::string&amp; = &quot;&quot;);
        Tracer(const Tracer&amp;);
        Tracer&amp; operator=(const Tracer&amp;);
        virtual ~Tracer();
        const std::string&amp; Objektname() const { return tracename;}
        static void druckeObjekte();
        static void TextEinfuegen(const std::string&amp;);
};
#endif // TRACER_H_INCLUDED
</code></pre>
<p>TRACER_H_INCLUDED.cpp</p>
<pre><code class="language-cpp">#include &quot;Tracer.h&quot;
#include &lt;fstream&gt;

static std::ofstream tracedatei;

std::vector&lt;Tracer*&gt; Tracer::tracervec;

Tracer start(&quot;Startobjekt&quot;);

Tracer::Tracer(const std::string&amp; name) : tracename(name)
{
    if(Anzahl() == 1)
    {
        const std::string DATEINAME = &quot;tracer.txt&quot;;
        tracedatei.open(DATEINAME.c_str());
        std::cout&lt;&lt;DATEINAME;

        if(!tracedatei)
        {
            std::cout&lt;&lt;&quot; konnte nicht geoeffnet werden!&quot;&lt;&lt;std::endl;
            exit(1);
        }
        else
        {
            std::cout&lt;&lt;&quot; wird erzeugt!&quot;&lt;&lt;std::endl;
        }
    }
    tracervec.push_back(this);
    tracedatei&lt;&lt;&quot;(&quot;&lt;&lt; Seriennummer() &lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
}
Tracer::Tracer(const Tracer&amp; original) : tracename(original.tracename)
{
    tracervec.push_back(this);
    tracedatei&lt;&lt;&quot;(&quot;&lt;&lt; Seriennummer() &lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; erzeugt(Kopierkonstruktor).&quot;&lt;&lt;std::endl;
}
Tracer::~Tracer()
{
    std::vector&lt;Tracer*&gt;::iterator pos = tracervec.begin();

    while(pos != tracervec.end() &amp;&amp; *pos != this)
    {
        ++pos;
    }
    if(pos == tracervec.end())
    {
        tracedatei &lt;&lt;&quot;Abbruch! 'delete' auf nicht-existentes Objekt&quot;&lt;&lt;std::endl;
        tracedatei.close();
        exit(2);
    }
    else
    {

        tracervec.erase(pos);
        tracedatei&lt;&lt;&quot;(&quot;&lt;&lt;Seriennummer()&lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; geloescht.&quot;&lt;&lt;std::endl;
    }

    if(Seriennummer() == 1)
    {
        if(tracervec.size() == 0)
        {
            tracedatei&lt;&lt;&quot;Objektbilanz OK. Ende Protokollierung&quot;&lt;&lt;std::endl;
        }
        else
        {
            tracedatei&lt;&lt;&quot;Warnung! Fehlendes 'delete' fuer &quot;;
            druckeObjekte();

        }
    }
}
void Tracer::druckeObjekte()
{
    std::vector&lt;Tracer*&gt;::iterator pos = tracervec.begin();
    if(tracervec.size() == 1)
    {
        tracedatei&lt;&lt;&quot;1 existierendes Objekt.&quot;&lt;&lt;std::endl;
    }
    else
    {
        tracedatei&lt;&lt;tracervec.size()&lt;&lt;&quot; existierende Obejkte: &quot;&lt;&lt;std::endl;
        while(pos != tracervec.end())
        {
            tracedatei&lt;&lt;&quot;(&quot;&lt;&lt;(*pos)-&gt;Seriennummer()&lt;&lt;&quot;)&quot;&lt;&lt;(*pos)-&gt;Objektname()&lt;&lt;std::endl;

            ++pos;
        }
    }
}
Tracer&amp; Tracer::operator=(const Tracer&amp;)
{
    return *this;
}
void Tracer::TextEinfuegen(const std::string&amp; text)
{
    tracedatei&lt;&lt;text&lt;&lt;std::endl;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Tracer.h&quot;
using namespace std;

class BasisklasseA : virtual public Tracer
{
    public:
        BasisklasseA() :Tracer(&quot;BasisklasseA&quot;) {}
};
class BasisklasseB : virtual public Tracer
{
    public:
        BasisklasseB() :Tracer(&quot;BasisklasseB&quot;){}
};

int main()
{
    BasisklasseA A1;

    BasisklasseA A2;

    BasisklasseB *pB = new BasisklasseB;

    delete pB;

    return 0;
}
</code></pre>
<p>soo hoffe das ist alles <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 />
Ausgabe einer protokolldatei könnte so aussehen.</p>
<blockquote>
<p>(1)Startobjekt erzeugt.<br />
(2)BasisklasseA erzeugt.<br />
(3)BasisklasseA erzeugt.<br />
(4)BasisklasseB erzeugt.<br />
(4)BasisklasseB geloescht.<br />
(3)BasisklasseA geloescht.<br />
(2)BasisklasseA geloescht.<br />
(1)Startobjekt geloescht.<br />
Objektbilanz OK. Ende Protokollierung</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/218421/tracer-klasse-vorstellung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 03:58:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218421.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Jul 2008 19:06:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 21 Jul 2008 12:18:09 GMT]]></title><description><![CDATA[<p>Da es relativ viel Code ist wollte ich hier nicht alles in Tags packen und euch hier zeigen, sondern ich habe das ganze mal hochgeladen, und würde mich echt darüber freuen wenn sich die ein oder anderen Zeit nemen könnten und sich das mal ansehen könnten, und mir nützliche Tips geben kann, wie man was anders machen kann oder was noch dazu machen könnte.</p>
<p>Das ganze ist ein C::B Projekt.</p>
<p><a href="http://uploaded.to/?id=hhaxix" rel="nofollow">http://uploaded.to/?id=hhaxix</a></p>
<p>Ansonsten noch einen angenehmen Sonntag Abend.</p>
<p>Edit: Ein wenig Hilfe habe ich aus dem Breymann genommen, naja eigentlich relativ viel, wollte es trotzdem mal vorstellen.</p>
<p>EDIT:<br />
NUMMERIERTESOBJEK_H_INCLUDED.h</p>
<pre><code class="language-cpp">#ifndef NUMMERIERTESOBJEK_H_INCLUDED
#define NUMMERIERTESOBJEK_H_INCLUDED

#include&lt;iostream&gt;
#include&lt;cstdlib&gt;
class NummeriertesObjekt
{
    private:
        static int anzahl;
        static unsigned long maxNummer;
        const unsigned long SerienNr;

    public:
        NummeriertesObjekt();
        NummeriertesObjekt(const NummeriertesObjekt&amp;);
        ~NummeriertesObjekt();
        unsigned long Seriennummer()const { return SerienNr;}
        static int Anzahl() {return anzahl;}
        static bool Testmodus;
};

#endif // NUMMERIERTESOBJEK_H_INCLUDED
</code></pre>
<p>NUMMERIERTESOBJEK_H_INCLUDED.cpp</p>
<pre><code class="language-cpp">#include &quot;NummeriertesObjek.h&quot;

int           NummeriertesObjekt::anzahl = 0;
unsigned long NummeriertesObjekt::maxNummer = 0L;
bool          NummeriertesObjekt::Testmodus = false;

NummeriertesObjekt::NummeriertesObjekt() : SerienNr(++maxNummer)
{
    ++anzahl;
    if(Testmodus)
    {
        if(SerienNr == 1)
        {
            std::cout&lt;&lt;&quot;Start der Objekterzeugung&quot;&lt;&lt;std::endl;
            std::cout&lt;&lt;&quot;Objekt Nr. &quot;&lt;&lt;SerienNr&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
        }
    }
}
NummeriertesObjekt::NummeriertesObjekt(const NummeriertesObjekt &amp;numobj) : SerienNr(++maxNummer)
{
    ++anzahl;
    if(Testmodus)
    {
        std::cout&lt;&lt;&quot;Objekt Nr. &quot;&lt;&lt;SerienNr&lt;&lt;&quot; mit Nr. &quot;&lt;&lt;numobj.Seriennummer()&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
    }
}
NummeriertesObjekt::~NummeriertesObjekt()
{
    --anzahl;
    if(anzahl &lt; 0)
    {
           assert(anzahl &gt;=0);
    }

}
</code></pre>
<p>TRACER_H_INCLUDED.h</p>
<pre><code class="language-cpp">#ifndef TRACER_H_INCLUDED
#define TRACER_H_INCLUDED
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;..\NumObj\NummeriertesObjek.h&quot;

class Tracer : public NummeriertesObjekt
{
    private:
        static std::vector&lt;Tracer*&gt; tracervec;
        const std::string tracename;

    public:
        Tracer(const std::string&amp; = &quot;&quot;);
        Tracer(const Tracer&amp;);
        Tracer&amp; operator=(const Tracer&amp;);
        virtual ~Tracer();
        const std::string&amp; Objektname() const { return tracename;}
        static void druckeObjekte();
        static void TextEinfuegen(const std::string&amp;);
};
#endif // TRACER_H_INCLUDED
</code></pre>
<p>TRACER_H_INCLUDED.cpp</p>
<pre><code class="language-cpp">#include &quot;Tracer.h&quot;
#include &lt;fstream&gt;

static std::ofstream tracedatei;

std::vector&lt;Tracer*&gt; Tracer::tracervec;

Tracer start(&quot;Startobjekt&quot;);

Tracer::Tracer(const std::string&amp; name) : tracename(name)
{
    if(Anzahl() == 1)
    {
        const std::string DATEINAME = &quot;tracer.txt&quot;;
        tracedatei.open(DATEINAME.c_str());
        std::cout&lt;&lt;DATEINAME;

        if(!tracedatei)
        {
            std::cout&lt;&lt;&quot; konnte nicht geoeffnet werden!&quot;&lt;&lt;std::endl;
            exit(1);
        }
        else
        {
            std::cout&lt;&lt;&quot; wird erzeugt!&quot;&lt;&lt;std::endl;
        }
    }
    tracervec.push_back(this);
    tracedatei&lt;&lt;&quot;(&quot;&lt;&lt; Seriennummer() &lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; erzeugt.&quot;&lt;&lt;std::endl;
}
Tracer::Tracer(const Tracer&amp; original) : tracename(original.tracename)
{
    tracervec.push_back(this);
    tracedatei&lt;&lt;&quot;(&quot;&lt;&lt; Seriennummer() &lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; erzeugt(Kopierkonstruktor).&quot;&lt;&lt;std::endl;
}
Tracer::~Tracer()
{
    std::vector&lt;Tracer*&gt;::iterator pos = tracervec.begin();

    while(pos != tracervec.end() &amp;&amp; *pos != this)
    {
        ++pos;
    }
    if(pos == tracervec.end())
    {
        tracedatei &lt;&lt;&quot;Abbruch! 'delete' auf nicht-existentes Objekt&quot;&lt;&lt;std::endl;
        tracedatei.close();
        exit(2);
    }
    else
    {

        tracervec.erase(pos);
        tracedatei&lt;&lt;&quot;(&quot;&lt;&lt;Seriennummer()&lt;&lt;&quot;)&quot;&lt;&lt;tracename&lt;&lt;&quot; geloescht.&quot;&lt;&lt;std::endl;
    }

    if(Seriennummer() == 1)
    {
        if(tracervec.size() == 0)
        {
            tracedatei&lt;&lt;&quot;Objektbilanz OK. Ende Protokollierung&quot;&lt;&lt;std::endl;
        }
        else
        {
            tracedatei&lt;&lt;&quot;Warnung! Fehlendes 'delete' fuer &quot;;
            druckeObjekte();

        }
    }
}
void Tracer::druckeObjekte()
{
    std::vector&lt;Tracer*&gt;::iterator pos = tracervec.begin();
    if(tracervec.size() == 1)
    {
        tracedatei&lt;&lt;&quot;1 existierendes Objekt.&quot;&lt;&lt;std::endl;
    }
    else
    {
        tracedatei&lt;&lt;tracervec.size()&lt;&lt;&quot; existierende Obejkte: &quot;&lt;&lt;std::endl;
        while(pos != tracervec.end())
        {
            tracedatei&lt;&lt;&quot;(&quot;&lt;&lt;(*pos)-&gt;Seriennummer()&lt;&lt;&quot;)&quot;&lt;&lt;(*pos)-&gt;Objektname()&lt;&lt;std::endl;

            ++pos;
        }
    }
}
Tracer&amp; Tracer::operator=(const Tracer&amp;)
{
    return *this;
}
void Tracer::TextEinfuegen(const std::string&amp; text)
{
    tracedatei&lt;&lt;text&lt;&lt;std::endl;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Tracer.h&quot;
using namespace std;

class BasisklasseA : virtual public Tracer
{
    public:
        BasisklasseA() :Tracer(&quot;BasisklasseA&quot;) {}
};
class BasisklasseB : virtual public Tracer
{
    public:
        BasisklasseB() :Tracer(&quot;BasisklasseB&quot;){}
};

int main()
{
    BasisklasseA A1;

    BasisklasseA A2;

    BasisklasseB *pB = new BasisklasseB;

    delete pB;

    return 0;
}
</code></pre>
<p>soo hoffe das ist alles <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 />
Ausgabe einer protokolldatei könnte so aussehen.</p>
<blockquote>
<p>(1)Startobjekt erzeugt.<br />
(2)BasisklasseA erzeugt.<br />
(3)BasisklasseA erzeugt.<br />
(4)BasisklasseB erzeugt.<br />
(4)BasisklasseB geloescht.<br />
(3)BasisklasseA geloescht.<br />
(2)BasisklasseA geloescht.<br />
(1)Startobjekt geloescht.<br />
Objektbilanz OK. Ende Protokollierung</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1550453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550453</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 21 Jul 2008 12:18:09 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sun, 20 Jul 2008 19:08:42 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>und sich das mal ansehen könnten, und mir nützliche Tips geben kann, wie man was anders machen kann oder was noch dazu machen könnte.</p>
</blockquote>
<p>Du könntest das in der Programmiersprache D lösen.<br />
D löst nämlich alle deine Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550457</guid><dc:creator><![CDATA[C++ nutze ich nicht mehr]]></dc:creator><pubDate>Sun, 20 Jul 2008 19:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sun, 20 Jul 2008 19:15:28 GMT]]></title><description><![CDATA[<p>C++ nutze ich nicht mehr schrieb:</p>
<blockquote>
<p>Firefighter schrieb:</p>
<blockquote>
<p>und sich das mal ansehen könnten, und mir nützliche Tips geben kann, wie man was anders machen kann oder was noch dazu machen könnte.</p>
</blockquote>
<p>Du könntest das in der Programmiersprache D lösen.<br />
D löst nämlich alle deine Probleme.</p>
</blockquote>
<p>Also ich habe keine Probleme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26836">@topic</a>: Was macht eine Tracer Klasse? <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/1550464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550464</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 20 Jul 2008 19:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sun, 20 Jul 2008 19:19:31 GMT]]></title><description><![CDATA[<p>Dies Tracer Klasse soll das erstellen und Löschen von Objekten mitprotokollieren und dich gegenfals darauf hinweisen wenn du versuchst zu viel zu deleten oder dir zum beispiel ein Delete fehlt, eine Beispiel tracerprotokoll datei liegt schon im projekt dabei, kann als eingesehen werden um mal reinzuschnuppern wie die protokollierung ungefähr aussieht. Ich habe leider bei der protokollierung von zu vielen Deletes noch ein problem, jedoch kam ich da nicht weiter und dachte von euch Rat zu erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550469</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Jul 2008 19:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sun, 20 Jul 2008 21:06:17 GMT]]></title><description><![CDATA[<p>C++ nutze ich nicht mehr schrieb:</p>
<blockquote>
<p>Firefighter schrieb:</p>
<blockquote>
<p>und sich das mal ansehen könnten, und mir nützliche Tips geben kann, wie man was anders machen kann oder was noch dazu machen könnte.</p>
</blockquote>
<p>Du könntest das in der Programmiersprache D lösen.<br />
D löst nämlich alle deine Probleme.</p>
</blockquote>
<p>Problem hat man dann, wenn man nichts zu Essen oder kein Dach über den Kopf hat. Dann hat man ein Problem! Aber nicht wenn man sich eine Tracer-Klasse schreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550529</guid><dc:creator><![CDATA[HansiHinterseher]]></dc:creator><pubDate>Sun, 20 Jul 2008 21:06:17 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 21 Jul 2008 11:25:51 GMT]]></title><description><![CDATA[<p>Ohne aufdringlich zu wirken <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="🙂"
    /> Aber ich würde mich über konstruktive Kritik freuen, bzw über hilfreiche Tips.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550862</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 21 Jul 2008 11:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 21 Jul 2008 12:01:51 GMT]]></title><description><![CDATA[<p>Dann stell' den Code mal anständig zur Verfügung <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/1550890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550890</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 21 Jul 2008 12:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 21 Jul 2008 12:14:30 GMT]]></title><description><![CDATA[<p>Das habe ich extra nicht gemacht weil ich dachte es wäre einfach zu viel, aber ok wenn ihr meint mache ich es mal:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550893</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 21 Jul 2008 12:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Fri, 01 Aug 2008 16:28:52 GMT]]></title><description><![CDATA[<p>Nun steht der Code zur verfügung, ich uppe zwar sehr ungerne, aber ich wollte eure Meinung dazu hören, danke im voraus <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/1557689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557689</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 01 Aug 2008 16:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Fri, 01 Aug 2008 18:29:11 GMT]]></title><description><![CDATA[<p>soll das viel code sein?</p>
<p>meine projekte hatten schon 10000 /100000 und mehr zeilen, ohne abstände natürlich und ohne geschwungene klammern in die nächste zeilen so wie du.</p>
<p>&quot;pff viel code mag nicht reintun mit den klammern in zeilenanfängen&quot;</p>
<p>WoW rockt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557739</guid><dc:creator><![CDATA[hom]]></dc:creator><pubDate>Fri, 01 Aug 2008 18:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Fri, 01 Aug 2008 20:59:16 GMT]]></title><description><![CDATA[<p>Oh, da kann ne Menge zu sagen:</p>
<p><strong>NummeriertesObjekt:</strong><br />
<code>if(Testmodus)</code> würde ich nicht machen. Benutz' stattdessen zB den Präprozessor mit NDEBUG (also baue eine Variante zum Debuggen und eine für das fertige Programm).<br />
Inkludiere nur dort, wo es sein muss. <code>#include &lt;iostream&gt;</code> und <code>#include &lt;cstdlib&gt;</code> gehören in die Implementierungsdatei. Dort fehlt auch noch <code>#include &lt;cassert&gt;</code> .<br />
Das assert hast du falsch verwendet, schau dir nochmal dessen Semantik an.</p>
<p><strong>Tracer:</strong><br />
Benutze '/' als Pfadtrenner. Das ist meines Wissens portabler (läuft auch unter Windows, ob \ unter Unices funktioniert kann ich grad nicht sagen).<br />
Warum hat Tracer einen virtuellen Destruktor? Du solltest diesen Overhead dem Anwender nur aufzwingen, wenn du tatsächlich auch virtuelle Funktionen benutzt. Tust du aber nicht. Von einer solchen Klasse sollte eh nicht öffentlich geerbt werden.<br />
Benutze im Destruktor std::find um this zu finden statt deiner selbst gebauten Lösung.</p>
<p>Generell sind ein paar Sachen designtechnisch nicht so glücklich. Du solltest z.B. Ausgabe nicht zwingend durch std::cout schicken, genauso wenig wie zwingend in eine Datei. Benutz ostream-Referenzen dafür und wie gesagt sollte von Tracer und NummeriertesObjekt höchstens protected geerbt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557818</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 01 Aug 2008 20:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Fri, 01 Aug 2008 21:08:18 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Benutze '/' als Pfadtrenner. Das ist meines Wissens portabler (läuft auch unter Windows, ob \ unter Unices funktioniert kann ich grad nicht sagen).</p>
</blockquote>
<p>das möchte ich unterstreichen. der backslash funktioniert definitiv nicht unter unixoiden. und ich glaube (hoffe), dass microsoft sich von dem backslash in einem der nächsten windows-dateisysteme abwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557828</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Fri, 01 Aug 2008 21:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sat, 02 Aug 2008 11:20:24 GMT]]></title><description><![CDATA[<p>Warum sollte sich Microsoft denn den Unix-Systemen anpassen? Außerdem ist der Pfadtrenner bei Windows auch noch Länderspezifisch. Bei einem japanischen Windows ist es z.Bsp. das Yen-Zeichen. <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/1557993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557993</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Sat, 02 Aug 2008 11:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sat, 02 Aug 2008 11:25:15 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Warum sollte sich Microsoft denn den Unix-Systemen anpassen? Außerdem ist der Pfadtrenner bei Windows auch noch Länderspezifisch. Bei einem japanischen Windows ist es z.Bsp. das Yen-Zeichen. <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>
</blockquote>
<p>weil es mir als entwickler dann weniger kopfschmerzen bereitet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557994</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 02 Aug 2008 11:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sat, 02 Aug 2008 11:28:51 GMT]]></title><description><![CDATA[<p>Das ist ein gutes Argument. <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 />
Wir können ja mal eine Petition an Microsoft schicken. Das mit dem Yen-Zeichen hatte mir auch einiges an Arbeit eingebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557999</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Sat, 02 Aug 2008 11:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sat, 02 Aug 2008 11:29:44 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Das ist ein gutes Argument. <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 />
Wir können ja mal eine Petition an Microsoft schicken. Das mit dem Yen-Zeichen hatte mir auch einiges an Arbeit eingebracht.</p>
</blockquote>
<p>ich glaube das wird nix helfen <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/1558000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558000</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 02 Aug 2008 11:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Sat, 02 Aug 2008 11:47:21 GMT]]></title><description><![CDATA[<p>Wie ich schon in einem Interview bekannt gab habe sogar ich mich von Windows abgewendet, ist einfach ein ewiges rumgekrampfe.</p>
<p>Ich finde die Tracer-Klasse so eher weniger nützlich, da sie nur sehr wenige Informationen bereit stellt, wenn ich Probleme haben mit dem Lebenszyklen von Objekten, dann brauche ich eigentlich immer noch zusätzlich ein Stacktrace und mehrere Checkpoints an kritischen Stellen um zu wissen wo gerade wie verzweigt wurde, sonst weiß ich ja nachher gar nicht wo etwas schief gegangen ist.</p>
<p>Einfach den Speicher nach Leaks zu überwachen bietet ja inzwischen jeder Compiler im Debug-Modus an, ebenso Speicherchecks (also Index-Out-Of-Bounds oder Off-By-One Fehler).</p>
<p>Am angenehmsten unter Windows finde ich das Erstellen eines Minidumps, mit dem enthaltenen Fehler, dann kann man ganz in Ruhe sich hinsetzen und den Fehler analysieren, ist für mich also das ultimative Tracert, wenn man so will.</p>
<p>Falls du Linux benutzt, hast du dir mal strace angesehen, eine Ausgabe wie sie dort erfolgt beinhaltet auch weit mehr Informationen als dein Trace-Tool. Schau dir das mal an und versuch das in deine Bibliothek mitaufzunehmen.</p>
<p>P.S. Ist der Header im ersten Posting die gesamte Trace-Bibliothek?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558009</guid><dc:creator><![CDATA[Billy Boy]]></dc:creator><pubDate>Sat, 02 Aug 2008 11:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 12:04:24 GMT]]></title><description><![CDATA[<p>Hey super danke, genauso so eine Kritik brauchte ich, damit kann ich wunderbar weiterarbeiten um das zu verbessern. Andere Frage, würdet ihr noch weitere Funktionen hinzufügen??</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@.filmor</a><br />
Wie meinst du das mit dem &quot;nicht öffentlich geerbt&quot;? Was muss ich da anders machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558957</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 04 Aug 2008 12:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 15:45:13 GMT]]></title><description><![CDATA[<p>Falls dich das Thema interessiert, solltest du dich mal mit aspektorientierter Programmierung befassen. C++ bietet hierfür leider keinen Support (D übrigens genauso wenig). Es gibt allerdings einige Aufsätze wie zB AspectC++. Damit lassen sich Sachen wie Debug-Handling viel sauberer implementieren, weil sie von der eigentlichen Programmlogik getrennt werden.</p>
<p>Bezüglich &quot;nicht öffentlich geerbt&quot;, .filmor meint, deine Klasse <em>Tracer</em> ist keine typische Basisklasse, also ist der virtuelle dtor überflüssig. Virtuelle dtors machen ja nur dort Sinn, wo vererbt wird, also die Klasse als Basisklasse benutzt wird, und das öffentlich (public). Wird nicht öffentlich vererbt, kann auf die Instanz der Basisklasse auch nicht zugegriffen werden und non-virtual bietet keine potenzielle Gefahr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559124</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 04 Aug 2008 15:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 16:06:43 GMT]]></title><description><![CDATA[<p>Aber wenn ich, angenommen ich mache es, jede meiner neugeschriebenen Klassen von der Tracer Klasse erben lasse ist es dann keine Basisklasse? Oder ist es deswegen keine Basisklasse weil ich in keiner meiner erbenden Klasse eine Methode von der Tracerklasse überschreibe??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559130</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 04 Aug 2008 16:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 16:45:43 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Aber wenn ich, angenommen ich mache es, jede meiner neugeschriebenen Klassen von der Tracer Klasse erben lasse ist es dann keine Basisklasse?</p>
</blockquote>
<p>Doch. Nur sollst du ja nicht öffentlich erben. Oder möchtest du Zugriff auf die Basisklasse (Tracer) in der erbenden Klasse erlauben? Ich persönlich würde das eher als falsches Design empfinden. Deine Tracer Klasse soll ja im Hintergrund arbeiten, ohne dass jemand etwas davon mitbekommt, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559147</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 04 Aug 2008 16:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 17:18:16 GMT]]></title><description><![CDATA[<p>stimmt...da hast du natürlich vollkommend recht. Aber ich will ehrlich sein, kann ich denn eine Klasse private erben lassen? habe bissher nur public erben lassen, geht private wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559170</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 04 Aug 2008 17:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 20:25:45 GMT]]></title><description><![CDATA[<p>Statt</p>
<pre><code class="language-cpp">class Derived : public Base
{...};
</code></pre>
<p>nimmst du eben</p>
<pre><code class="language-cpp">class Derived : private Base
{...};
</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>
]]></description><link>https://www.c-plusplus.net/forum/post/1559246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559246</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 20:39:59 GMT]]></title><description><![CDATA[<p>Ok aber kann ich denn dan trotzdem noch den Konstruktor von Trace aufrufen? weil den brauche ich doch oder net? Laut meiner Codefiles, wird ja der Tracer konstruktor benutzt.?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559259</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Mon, 04 Aug 2008 20:41:26 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Ok aber kann ich denn dan trotzdem noch den Konstruktor von Trace aufrufen? weil den brauche ich doch oder net? Laut meiner Codefiles, wird ja der Tracer konstruktor benutzt.?</p>
</blockquote>
<p>Bei private Ableitung, kannst du alles benutzen, was in der Base unter public ist, sofern also der c-tor public ist, geht das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559260</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 04 Aug 2008 20:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Tracer-Klasse Vorstellung on Tue, 05 Aug 2008 06:23:21 GMT]]></title><description><![CDATA[<p>Alles klar, damit ist mein Wissensdurst vorläufig gestillt. Danke an alle die hier einen qualifizierten Kommentar da gelassen haben <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/1559350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559350</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Tue, 05 Aug 2008 06:23:21 GMT</pubDate></item></channel></rss>