<?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[vererbungsproblem mit cstring()]]></title><description><![CDATA[<p>hi!</p>
<p>ich habe eine Klasse CAccess, die abgeleitet ist von einer Klasse CAdoDB.</p>
<p>In CAdoDB sind mehrere CStrings als Stack-Variablen, die entweder protected oder public sind.</p>
<p>Sobald der Dekonstruktor von CAdoDB durch CAccess aufgerufen wird, gibt es eine Exception an der Stelle:</p>
<pre><code class="language-cpp">void Release() throw()
{
    ATLASSERT( nRefs != 0 );

    if( _InterlockedDecrement( &amp;nRefs ) &lt;= 0 )
    {
        pStringMgr-&gt;Free( this );
    }
}
</code></pre>
<p>^^ Gehört zu CString</p>
<p>Wenn man debuggt merkt man, dass die CStrings tlw. auf einen falschen Speicherbereich zeigen und dass obwohl sie nicht dynamisch sind... Das ist doch unmöglich, oder?</p>
<p>Der Dekonstruktor von CAdoDB ist virtual.</p>
<p>Was könnte sonst zu so einem Fehler führen? Ich bin leider nicht so der Profi was das vererben angeht...</p>
<p>EDIT: Dekonstruktor = Destruktor <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/52224/vererbungsproblem-mit-cstring</link><generator>RSS for Node</generator><lastBuildDate>Mon, 01 Jun 2026 00:19:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/52224.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Oct 2003 12:05:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vererbungsproblem mit cstring() on Fri, 17 Oct 2003 13:22:36 GMT]]></title><description><![CDATA[<p>hi!</p>
<p>ich habe eine Klasse CAccess, die abgeleitet ist von einer Klasse CAdoDB.</p>
<p>In CAdoDB sind mehrere CStrings als Stack-Variablen, die entweder protected oder public sind.</p>
<p>Sobald der Dekonstruktor von CAdoDB durch CAccess aufgerufen wird, gibt es eine Exception an der Stelle:</p>
<pre><code class="language-cpp">void Release() throw()
{
    ATLASSERT( nRefs != 0 );

    if( _InterlockedDecrement( &amp;nRefs ) &lt;= 0 )
    {
        pStringMgr-&gt;Free( this );
    }
}
</code></pre>
<p>^^ Gehört zu CString</p>
<p>Wenn man debuggt merkt man, dass die CStrings tlw. auf einen falschen Speicherbereich zeigen und dass obwohl sie nicht dynamisch sind... Das ist doch unmöglich, oder?</p>
<p>Der Dekonstruktor von CAdoDB ist virtual.</p>
<p>Was könnte sonst zu so einem Fehler führen? Ich bin leider nicht so der Profi was das vererben angeht...</p>
<p>EDIT: Dekonstruktor = Destruktor <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/374373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/374373</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Fri, 17 Oct 2003 13:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to vererbungsproblem mit cstring() on Fri, 17 Oct 2003 12:58:11 GMT]]></title><description><![CDATA[<p>bitte was iss ein dekonstruktor ????????<br />
lt. c/c++ doku gibts so was net.... net einmal in der mfc-bib !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/374423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/374423</guid><dc:creator><![CDATA[bla---]]></dc:creator><pubDate>Fri, 17 Oct 2003 12:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to vererbungsproblem mit cstring() on Sat, 18 Oct 2003 07:59:48 GMT]]></title><description><![CDATA[<p>Ist wohl kaum ein Vererbugsproblem. Die üblichen Gründe sind:</p>
<p>a) Fandango on Core - du schreibst über ienen zulässigen Speicherbereich drüber raus, verwendest ein nicht mehr gültiges Objekt usw.<br />
Das kann (leider) wo vollkommen anders sein...</p>
<p>b) Stale Lib - eine eingebundene .lib verwendet eine andere Definition der Klasse (z.B. wo ein zuletzt eingeführter member nicht existiert)<br />
c) Cast Away ( <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="🙄"
    /> ) du machst sowas:</p>
<p>class A { ... };<br />
class B : public A { };</p>
<p>typedef .... C; // some type unrelated to A and B, could be &quot;void&quot;</p>
<p>B b;<br />
C * ptr = &amp;b; // reinterpret-cast: keine Anpassung durch Klassen-Hierarchie<br />
A* pA = (A <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="😉"
    /> ptr; // reinterpret-cast: keine Anpassung durch Klassen-Hierarchie</p>
<p>das ist equivalent mit einem reinterpret-cast von B nach A, und kann das beschriebene Problem verursachen.<br />
(Wenn's das sein sollte - immer static_cast / dynamic_cast / reinterpret_cast / const_cast verwenden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/374762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/374762</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Sat, 18 Oct 2003 07:59:48 GMT</pubDate></item></channel></rss>