<?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[new - delete Anfängerfrage?]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich habe ein grundlegendes Verständisprobleme was new , delete, statische und dynamische Objekte betrifft. Lasst euch in dem Programmausschnitten nicht von der CppUnit Sache stören. Es geht nur ums Prinzip..</p>
<p>Also ich habe ein dynamisches Objekt</p>
<pre><code>m_suiteOfTests
</code></pre>
<p>,mit new angelegt.<br />
Diese füge ich mit</p>
<pre><code>m_testrunner.addTest(m_suiteOfTests )
</code></pre>
<p>einem Objekt Testrunner hinzu.</p>
<p>Jetzt meine Frage: Eigentlich müsste ich doch die</p>
<pre><code>m_suiteOfTest
</code></pre>
<p>wieder mit delete aus dem Speicher entfernen, oder? geht aber nicht, weil sie jetzt Teil vom</p>
<pre><code>m_testrunner
</code></pre>
<p>ist. Es gibt eine Exception. Aber der Testrunner ist wiederum ein statisches Objekt und muss nicht deleted werden, denk ich.</p>
<p>Muss jetzt überhaupt was deleted werden?</p>
<p>Im Header File:</p>
<pre><code>public:
	CPPUNIT_NS::TestResult m_testresult;
	CPPUNIT_NS::TestSuite *m_suiteOfTests ;
	CPPUNIT_NS::TestRunner m_testrunner;
	CPPUNIT_NS::TestResultCollector m_testcollector;
};
</code></pre>
<pre><code>Im *.cpp File:

[code]void CTest_tpmDlg::InitTest() {

	m_suiteOfTests = new CppUnit::TestSuite( &quot;ChosenTests&quot; );
    m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test1&quot;,&amp;TDDLI_TestCase::test1 ));
	m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test2&quot;,&amp;TDDLI_TestCase::test2 ));
	m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test3&quot;,&amp;TDDLI_TestCase::test3 ));

	m_testresult.addListener( &amp;m_testcollector );        
	CPPUNIT_NS::ExtendedTestListener progress(	&amp;m_testcollector,
												this,
												m_suiteOfTests-&gt;getChildTestCount());
	m_testresult.addListener( &amp;progress );      
	CPPUNIT_NS::TestRunner m_testrunner;
	m_testrunner.addTest(m_suiteOfTests );
}
</code></pre>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163240/new-delete-anfängerfrage</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 00:23:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163240.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Oct 2006 13:06:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:06:05 GMT]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich habe ein grundlegendes Verständisprobleme was new , delete, statische und dynamische Objekte betrifft. Lasst euch in dem Programmausschnitten nicht von der CppUnit Sache stören. Es geht nur ums Prinzip..</p>
<p>Also ich habe ein dynamisches Objekt</p>
<pre><code>m_suiteOfTests
</code></pre>
<p>,mit new angelegt.<br />
Diese füge ich mit</p>
<pre><code>m_testrunner.addTest(m_suiteOfTests )
</code></pre>
<p>einem Objekt Testrunner hinzu.</p>
<p>Jetzt meine Frage: Eigentlich müsste ich doch die</p>
<pre><code>m_suiteOfTest
</code></pre>
<p>wieder mit delete aus dem Speicher entfernen, oder? geht aber nicht, weil sie jetzt Teil vom</p>
<pre><code>m_testrunner
</code></pre>
<p>ist. Es gibt eine Exception. Aber der Testrunner ist wiederum ein statisches Objekt und muss nicht deleted werden, denk ich.</p>
<p>Muss jetzt überhaupt was deleted werden?</p>
<p>Im Header File:</p>
<pre><code>public:
	CPPUNIT_NS::TestResult m_testresult;
	CPPUNIT_NS::TestSuite *m_suiteOfTests ;
	CPPUNIT_NS::TestRunner m_testrunner;
	CPPUNIT_NS::TestResultCollector m_testcollector;
};
</code></pre>
<pre><code>Im *.cpp File:

[code]void CTest_tpmDlg::InitTest() {

	m_suiteOfTests = new CppUnit::TestSuite( &quot;ChosenTests&quot; );
    m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test1&quot;,&amp;TDDLI_TestCase::test1 ));
	m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test2&quot;,&amp;TDDLI_TestCase::test2 ));
	m_suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;TDDLI_TestCase&gt;(&quot;test3&quot;,&amp;TDDLI_TestCase::test3 ));

	m_testresult.addListener( &amp;m_testcollector );        
	CPPUNIT_NS::ExtendedTestListener progress(	&amp;m_testcollector,
												this,
												m_suiteOfTests-&gt;getChildTestCount());
	m_testresult.addListener( &amp;progress );      
	CPPUNIT_NS::TestRunner m_testrunner;
	m_testrunner.addTest(m_suiteOfTests );
}
</code></pre>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162478</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:06:05 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:18:29 GMT]]></title><description><![CDATA[<p>Statische Objekte werden nach Abarbeitung der main-Funktion automatisch destruiert. Darum mußt du dich nicht kümmern (allerdings sehe ich nicht, wo in deinem Code irgendetwas als static deklariert wäre).</p>
<p>Was das Objekt angeht, das du an dein CPPUNIT_NS::TestRunner-Objekt übergibst angeht, hängt es eben davon ab, ob du die Verantwortung für das Löschen des Objektes bei der Übergabe an das empfangende Objekt übertragen willst.</p>
<p>Wenn ja (in diesem Fall wohl empfehlenswert), muß der CPPUNIT_NS::TestRunner-Destruktor es freigeben. Wenn nein, mußt du es außerhalb freigeben (wobei du darauf achten mußt, daß es dein CPPUNIT_NS::TestRunner-Objekt danach nicht mehr verwendet).</p>
<p>Übrigens ist dein Code nicht Exception-sicher. Aber ich nehme mal an, da du dich derzeit noch mit new/delete-Problemen herumschlägst, hast du im Moment andere Sorgen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162495</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:21:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ja du must die Instanz elber löschen. Aber erst nachdem dein Programm es nicht mehr braucht. Offenbar machst du das delete, und danach will CTest_tpmDlg noch auf die nun nicht mehr gültige Instanz zugreifen.</p>
<p>Du must nun entscheiden wann du die Instanz nicht mehr brauchst. Wenn nur CTest_tpmDlg die Instanz braucht, sollte auch der Destruktor von CTest_tpmDlg diese wieder löschen.<br />
Wenn aber die Instanz auch ohne/mit mehreren Instanzen von CTest_tpmDlg laufen soll, must du ein anderes Übergeordnetes Objekt finden. Im schlimmsten Fall machst du ein Singleton draus.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162499</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:24:08 GMT]]></title><description><![CDATA[<p>danke erst mal. den testrunner code möchte ich nicht verändern, der ist nicht von mir. als ich versucht habe, das suiteOfTests freizugeben, dann gabs eine exception, obwohl ich den testrunner an dieser stelle nicht mehr benutzt habe... komisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162502</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:26:51 GMT]]></title><description><![CDATA[<p>Vielleicht gibt testrunner bei der Destruktion suiteOfTests bereits frei? Das sollte eigentlich in der Dokumentation stehen. Ansonsten kannst du mal im Quelltext nachsehen (sofern du ihn zur Verfügung hast).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162505</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:31:01 GMT]]></title><description><![CDATA[<p>ach so.. ist es nicht so, dass ein objekt das mit new ein dynamisches und eins das so :</p>
<p>CPPUNIT_NS::TestRunner m_testrunner;</p>
<p>instanziert wurde ein statisches ist? ich dachte ich hätte das gelesen. Das Schlüsselwort &quot;Static&quot; wird doch in c++ wie in Java eingesetzt, also Methoden die nur einmal existieren, nicht für jede instanz dieser Klasse.. ihr wisst schon was ich meine <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/1162513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162513</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:38:21 GMT]]></title><description><![CDATA[<p>Z2 du hast recht. ich habe mal in die sourcen vom testrunner geguckt und da steht :</p>
<pre><code>TestRunner::~TestRunner()
{
  delete m_suite;
}
</code></pre>
<p>reichlich verwirrend..wenn man da nicht die sourcen zur hand hätte.<br />
d.h. ich muss gar nichts machen, weil der testrunner automatisch detructed wird, wenn die methode verlassen wird. dann wird auch automatisch die testsuite gelöscht, wenn mich nicht alles täuscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162521</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 13:39:59 GMT]]></title><description><![CDATA[<p>Z2 du hast recht. ich habe mal in die sourcen vom testrunner geguckt und da steht :</p>
<pre><code>TestRunner::~TestRunner()
{
  delete m_suite;
}
</code></pre>
<p>reichlich verwirrend..wenn man da nicht die sourcen zur hand hätte.<br />
d.h. ich muss gar nichts machen, weil der testrunner automatisch detructed wird, wenn die methode verlassen wird. dann wird auch automatisch die testsuite gelöscht, wenn mich nicht alles täuscht.</p>
<p>da lob ich mir doch java <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/1162527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162527</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Fri, 27 Oct 2006 13:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Fri, 27 Oct 2006 14:47:29 GMT]]></title><description><![CDATA[<p>AFAIR hat der CppUnit TestRunner die Suite auch nach einem abgeschlossenen Testdurchlauf freigegeben.</p>
<p>Btw: Dir ist schon klar, daß die Zeile<br />
CPPUNIT_NS::TestRunner m_testrunner; in der Init Methode das gleichnamige Klassenmember überdeckt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162588</guid><dc:creator><![CDATA[Newow]]></dc:creator><pubDate>Fri, 27 Oct 2006 14:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to new - delete Anfängerfrage? on Mon, 30 Oct 2006 08:42:57 GMT]]></title><description><![CDATA[<p>ja ist schon klar. der programmcode sieht nicht ganz so aus, ich habe das aus unterschiedlichen quellen rauskopiert. vielen dank für eure hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164271</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Mon, 30 Oct 2006 08:42:57 GMT</pubDate></item></channel></rss>