<?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[template-klasse member übergeben]]></title><description><![CDATA[<p>hallo</p>
<p>ein stück code sagt mehr als 1000 worte:</p>
<pre><code class="language-cpp">template&lt;class T, T *parent&gt;
struct base
{
	virtual ~base()
	{
		delete parent;
	}
};
struct test : public base&lt;int, test::ptr&gt;
{
	test()
	{
		ptr = new int;
	}
	int *ptr;
};
</code></pre>
<p>ich will im prinzip erreichen dass die basisklasse meinen zeiger aus der abgeleiteten klasse löscht. durch erben soll ein destruktorcode automatisch<br />
ausgeführt werden, die basissklasse kennt jedoch nicht alle verschiedenen<br />
löschroutinen.</p>
<p>geht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238578/template-klasse-member-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:22:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238578.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Apr 2009 18:15:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template-klasse member übergeben on Sun, 12 Apr 2009 18:15:06 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>ein stück code sagt mehr als 1000 worte:</p>
<pre><code class="language-cpp">template&lt;class T, T *parent&gt;
struct base
{
	virtual ~base()
	{
		delete parent;
	}
};
struct test : public base&lt;int, test::ptr&gt;
{
	test()
	{
		ptr = new int;
	}
	int *ptr;
};
</code></pre>
<p>ich will im prinzip erreichen dass die basisklasse meinen zeiger aus der abgeleiteten klasse löscht. durch erben soll ein destruktorcode automatisch<br />
ausgeführt werden, die basissklasse kennt jedoch nicht alle verschiedenen<br />
löschroutinen.</p>
<p>geht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694945</guid><dc:creator><![CDATA[vorlage]]></dc:creator><pubDate>Sun, 12 Apr 2009 18:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Sun, 12 Apr 2009 18:52:10 GMT]]></title><description><![CDATA[<p>Nein,</p>
<p>Destruktoren können nicht aufgerufen werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694962</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Apr 2009 18:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Sun, 12 Apr 2009 19:44:29 GMT]]></title><description><![CDATA[<p>vermutlich hab ich mich unverständlich ausgedrückt <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>klasse A kann mehrere objekte der klasse B erzeugen. sobald ein objekt der<br />
klasse B gelöscht wird, meldet es sich von der oberklasse A ab, die in einer<br />
liste die kindobjekte verwaltet.</p>
<pre><code class="language-cpp">void B::~B()
{
    // parent vom typ A*
    // typedef std::vector&lt;B *&gt; vec;
    vec &amp;v = parent-&gt;childs;

    for (vec::iterator i = v.begin(), end = v.end(); i != end; ++i)
    {
        if (*i == this)
        {
            v.erase(i);
            break;
        }
    }
}
</code></pre>
<p>es geht nur darum nicht in <strong>jedem</strong> destruktor (mittlerweile ziemlich viele)<br />
so einen aufräumcode zu schreiben.</p>
<p>deshalb soll das eine andere klasse in ihrem destruktor machen, von der ich dann<br />
erben kann. fertig ist das ganze. nur wie kommt die basisklasse an den<br />
benötigten zeiger? konstruktor wäre eine möglichkeit, aber geht das wirklich<br />
nicht über die template-parameter-liste ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694985</guid><dc:creator><![CDATA[vorlage]]></dc:creator><pubDate>Sun, 12 Apr 2009 19:44:29 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Sun, 12 Apr 2009 19:53:00 GMT]]></title><description><![CDATA[<p>Also für so etwas sollte Vererbung nicht eingesetzt werden.. Das wäre Designtechnischer Unsinn. (Obwohl es irgendwie klingt, dass du da sonst noch ein Problem hast, wo Vererbung sinnvoll eingesetzt werden könnte.. Anscheinend haben die &quot;vielen&quot; Klassen ja eine Gemeinsamkeit und genau das solltest du auslagern und nicht nur irgendwie probieren das aufräumen übernehmen zu lassen)</p>
<p>Ansonten mach lieber eine Funktion, die das dann für dich übernimmt und die rufst du dann einfach im dtor auf und übergibst die nötigen Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694990</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 12 Apr 2009 19:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Mon, 13 Apr 2009 08:23:03 GMT]]></title><description><![CDATA[<p>sie haben keine gemeinsamkeit, allerdings kann die eine klasse durch die andere erzeugt werden.</p>
<p>warum darf man da nicht vererbung einsetzen? ich erbe halt von einer aufräum-klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695114</guid><dc:creator><![CDATA[vorlage]]></dc:creator><pubDate>Mon, 13 Apr 2009 08:23:03 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Mon, 13 Apr 2009 09:06:00 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>Destruktoren können nicht aufgerufen werden</p>
</blockquote>
<p>Doch können sie, nur sollte man da wissen, was man tut <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>@vorlage,<br />
Templateparameter müssen zur Kompilezeit bekannt sein. Dein <code>test::ptr</code> ist allerdings erst zur Laufzeit bekannt, daher geht dies nicht.</p>
<p>Für dein Problem würde ich aber auch eher eine freie Funktion verwenden. Vielleicht diese mit Templateparameter versehen, damit sie für unterschiedliche Typen funktioniert. Und dann eben immer einen Funktionsaufruf in den jeweiligen Destruktor.<br />
Aber wie die genau auszusehen hat, da müsstest du nochmals ein wenig genauer erklären, was du machst <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695136</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 13 Apr 2009 09:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Mon, 13 Apr 2009 10:50:21 GMT]]></title><description><![CDATA[<p>vorlage schrieb:</p>
<blockquote>
<p>warum darf man da nicht vererbung einsetzen? ich erbe halt von einer aufräum-klasse.</p>
</blockquote>
<p>Dürfen schon, aber das ist nicht der Sinn von Vererbung. Vererbung wird dort eingesetzt, wo Zusammenhänge und Gemeinsamkeiten dargestellt werden sollen und nicht die Schreibfaulheit unterstützen. Das würde zusätzlich die ganze Hierarchie komplizierter machen, als das sie ist. Eine freie Funktion ist dafür besser geeignet, da du da in etwa den gleichen Schreibaufwand hast (ein Funktionsaufruf im dtor, anstatt die Vererbung), allerdings ist die Hierarchie nicht gestört und das gesamte einfacher zu verstehen.<br />
Stell dir dazu mal vor, dass jemand anders, als du die Klasse anschaut und wenn er da eine Ableitung sieht, wird er die zuerst nicht anschauen, sondern schaut mal, was die Klasse so macht und wird feststellen, dass da irgendwie Speicher nicht aufgeräumt wird und im dtor findet er dann auch nichts. Bis er schlussendlich auf die wahnsinnige Idee kommt in der Basisklasse zu suchen. - Das ist doch verwirrend, nicht? - Im Gegensatz dazu ist alles klar, wenn im dtor eine Funktion aufgerufen wird und der diese gewissen Ressourcen übergeben werden. Einfach, klar und verständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695175</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 13 Apr 2009 10:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to template-klasse member übergeben on Mon, 13 Apr 2009 12:00:57 GMT]]></title><description><![CDATA[<p>vorlage schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void B::~B()
{
    // parent vom typ A*
    // typedef std::vector&lt;B *&gt; vec;
    vec &amp;v = parent-&gt;childs;

    for (vec::iterator i = v.begin(), end = v.end(); i != end; ++i)
    {
        if (*i == this)
        {
            v.erase(i);
            break;
        }
    }
}
</code></pre>
</blockquote>
<p>die schleife muß natürlich in die besitzerklasse rein.</p>
<pre><code class="language-cpp">class Hund;
class Besitzer
   vector&lt;Hund*&gt; hunde;
...
   viud fuegeHundHinzu(Hund* h){
      hunde.push_back(h);
   }
   void entferneHund(Hund* h){
      //hier die schleife
   }
   ~Besitzer(){
      //assert(hunde.empty());
   }
};
class Hund{
   Besitzer besitzer;
   Hund(Besizer* besizter){
      this-&gt;besitzer=besitzer;
      besitzer-&gt;fuegeHundHinzu(this);
   }
   virtuel ~Hund(){
      besitzer-&gt;entferneHund(this);
   }
   private: operator=(Hund const&amp;);
};
</code></pre>
<p>das versprechen, daß hunde immer einen besitzer haben und sich beim sterben brav abmelden, kann man schon in die basisklasse stopfen. da sehe ich kein problem.<br />
mir scheint, in der ursprünglichen frage wurden nur besitzdinge und vererbungsdinge vermischt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695205</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 13 Apr 2009 12:00:57 GMT</pubDate></item></channel></rss>