<?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[std::auto_ptr == operator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen auto_ptr:</p>
<pre><code>std::auto_ptr&lt;MeineKlasse&gt; m_apInstance;
</code></pre>
<p>Dann habe ich noch eine Methode:</p>
<pre><code>MeineKlasse &amp;MeineKlasse::GetInstance()
{
	if (m_apInstance == NULL)
	{
		m_apInstance = std::auto_ptr&lt;MeineKlasse&gt; (new MeineKlasse());
	}

	return *m_apInstance;
}
</code></pre>
<p>Der Compiler (VC++ 6) meldet folgendes:<br />
Error C2678: Binaerer Operator '==' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'class std::auto_ptr&lt;class CDBManager&gt;' akzeptiert (oder keine geeignete Konvertierung moeglich)</p>
<p>Ich habe gesehen, dass bei auto_ptr keinen &quot;==&quot;- oder &quot;!=&quot;-operator gibt.</p>
<p>Kann ich denn irgendwie abfragen, ob m_apInstance schon initialisiert wurde, außer dass ich eine Flag-Variable like: static bool m_bInitialized verwenden muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/76258/std-auto_ptr-operator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 15:56:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/76258.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jun 2004 10:35:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 10:35:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen auto_ptr:</p>
<pre><code>std::auto_ptr&lt;MeineKlasse&gt; m_apInstance;
</code></pre>
<p>Dann habe ich noch eine Methode:</p>
<pre><code>MeineKlasse &amp;MeineKlasse::GetInstance()
{
	if (m_apInstance == NULL)
	{
		m_apInstance = std::auto_ptr&lt;MeineKlasse&gt; (new MeineKlasse());
	}

	return *m_apInstance;
}
</code></pre>
<p>Der Compiler (VC++ 6) meldet folgendes:<br />
Error C2678: Binaerer Operator '==' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'class std::auto_ptr&lt;class CDBManager&gt;' akzeptiert (oder keine geeignete Konvertierung moeglich)</p>
<p>Ich habe gesehen, dass bei auto_ptr keinen &quot;==&quot;- oder &quot;!=&quot;-operator gibt.</p>
<p>Kann ich denn irgendwie abfragen, ob m_apInstance schon initialisiert wurde, außer dass ich eine Flag-Variable like: static bool m_bInitialized verwenden muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536617</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 09 Jun 2004 10:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 10:43:16 GMT]]></title><description><![CDATA[<p>if (m_apInstance.get() == NULL)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536624</guid><dc:creator><![CDATA[vielleicht!]]></dc:creator><pubDate>Wed, 09 Jun 2004 10:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 11:01:12 GMT]]></title><description><![CDATA[<p>vielleicht! schrieb:</p>
<blockquote>
<p>if (m_apInstance.get() == NULL)</p>
</blockquote>
<p>m_apInstance ist ja ein auto_ptr der per default = 0 gesetzt wird.<br />
Daher wollte ich ja ihm auch it new MeineKlasse() den Speicher zuweisen.</p>
<p>Ich habe im Moment ein Fehler in der Klasse, daher kann ich<br />
if (m_apInstance.get() == NULL)<br />
oder<br />
if (m_apInstance-&gt;get() == NULL)<br />
noch nicht testen.</p>
<p>Es sollte aber nicht funktionieren, da m_apInstance = 0 vom auto_ptr gesetzt ist.</p>
<p>Zumindest wenn du z.B. CString *pStr = NULL; machst und dann pStr-&gt;GetLength() oder was anderes aufriufst gibt's Ärger, da noch kein Speicher mit new oder alloc zugewiesen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536642</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 09 Jun 2004 11:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 11:04:40 GMT]]></title><description><![CDATA[<blockquote>
<p>Zumindest wenn du z.B. CString *pStr = NULL; machst und dann pStr-&gt;GetLength() oder was anderes aufriufst gibt's Ärger, da noch kein Speicher mit new oder alloc zugewiesen ist.</p>
</blockquote>
<p>Die get-Memberfunktion von auto_ptr gibt doch nur den Zeiger auf das unterliegende Objekt zurück. Und diesen prüfst du doch dann nur auf NULL. Da wird ja nichts illegales aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536643</guid><dc:creator><![CDATA[vielleicht!]]></dc:creator><pubDate>Wed, 09 Jun 2004 11:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 11:23:55 GMT]]></title><description><![CDATA[<p>Deine Behauptung wäre nur richtig wenn es um Pointer auf auto_ptr geht.</p>
<p>Also std::auto_ptr&lt;MeineKlasse&gt;* pAutoPtr;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536677</guid><dc:creator><![CDATA[vielleicht!]]></dc:creator><pubDate>Wed, 09 Jun 2004 11:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 11:52:56 GMT]]></title><description><![CDATA[<p>Besser so:</p>
<pre><code class="language-cpp">MeineKlasse &amp;MeineKlasse::GetInstance()
{
	if (!m_apInstance)
		m_apInstance.reset(new MeineKlasse());

	return *m_apInstance;
}
</code></pre>
<blockquote>
<p>Kann ich denn irgendwie abfragen, ob m_apInstance schon initialisiert wurde, außer dass ich eine Flag-Variable like: static bool m_bInitialized verwenden muss?</p>
</blockquote>
<p>Ja klar, genauso wie in GetInstance.</p>
<p>BTW eignet sich boost::scoped_ptr hier eigentlich noch besser, weil std::auto_ptr ein sehr unintuitives Kopier- und Zuweisungsverhalten hat, was sich auf die Klasse überträgt. scoped_ptr läßt Kopieren und Zuweisen einfach gar nicht zu. Das mag aber nicht so entscheidend sein, weil deine Klasse (als Singleton) wahrscheinlich sowieso privaten Kopierkonstruktur und Zuweisungsoperator hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536727</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 09 Jun 2004 11:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:45:40 GMT]]></title><description><![CDATA[<p>..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536785</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:40:30 GMT]]></title><description><![CDATA[<p>..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536788</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:42:37 GMT]]></title><description><![CDATA[<p>..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536789</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:42:37 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:47:49 GMT]]></title><description><![CDATA[<p>..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536791</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:47:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 09 Jun 2004 15:09:36 GMT]]></title><description><![CDATA[<p><strong>@vielleicht!</strong></p>
<p>vielleicht! schrieb:</p>
<blockquote>
<p>Die get-Memberfunktion von auto_ptr gibt doch nur den Zeiger auf das unterliegende Objekt zurück. Und diesen prüfst du doch dann nur auf NULL. Da wird ja nichts illegales aufgerufen.</p>
</blockquote>
<p>Du hattest vollkommen Recht <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 />
if (c_apInstance.get() == 0) funktioniert. Ich musste bloss die Dokumentation von std::auto_ptr gründlicher lesen..<br />
Dann wäre ich auch für meine eigene Faulheit nicht bestrafft ;=)</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/904">@Bashar</a></strong><br />
Ich habe das bisschen anders gelöst. Nachdem ich if (c_apInstance.get() == 0) geprüft habe und in dem if scope mit new neuen Speicher zugewiesen habe, anschließend: ASSERT(c_apInstance.get()); gemacht.<br />
Meine Klasse ist ein singleton und da nur eine Instance gleichzeitig erlaubt ist,<br />
macht das absolut keinen Sinn die einzige Instance Variable c_apInstance zu deleten und neuen Speicher zu zuweisen <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>Danke an alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/536871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/536871</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 09 Jun 2004 15:09:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:39:10 GMT]]></title><description><![CDATA[<p>Hat man hier nicht mal einen Button, wo man doppelte Beiträge löschen kann?<br />
Wo ich versucht habe auf den Beitrag zu antworten oder überhaupt das Forum zu betreten, hatte ich ständig angezeigt bekommen:<br />
&quot;cgi-error: max number of clients was reached, try again later&quot;<br />
oder so ung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/541331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/541331</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to std::auto_ptr == operator on Wed, 16 Jun 2004 08:44:05 GMT]]></title><description><![CDATA[<p>Ne geht nicht. Ist ja auch scheiß egal.</p>
<p>Das Forum ist ein bisschen buggy. Dich trifft kaum schuld. <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/541334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/541334</guid><dc:creator><![CDATA[ha ha]]></dc:creator><pubDate>Wed, 16 Jun 2004 08:44:05 GMT</pubDate></item></channel></rss>