<?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[Rückgabewerte überschreiben vs. smart pointer]]></title><description><![CDATA[<p>Ich würde gerne folgendes umsetzen:</p>
<pre><code class="language-cpp">class A {...};

class B : public A {...};

class Interface {
public:
	virtual A* get() = 0;
};

class Impl : public Interface {
public:
	virtual B* get();
};
</code></pre>
<p>Das compiliert und funktioniert so wie es soll.<br />
Sobald ich aber smart pointer verwende, klappt das (logischerweise) nicht mehr.</p>
<p>Gibt es einen Trick o.ä. das zu umgehen?</p>
<p>Das hier funktioniert nicht (da Rückgabewerte objekte und keine Pointer sind):</p>
<pre><code class="language-cpp">class A {...};

class B : public A {...};

class Interface {
public:
	virtual shared_ptr&lt;A&gt; get() = 0;
};

class Impl : public Interface {
public:
	virtual shared_ptr&lt;B&gt; get();
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/263402/rückgabewerte-überschreiben-vs-smart-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 19:26:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263402.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Mar 2010 11:31:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabewerte überschreiben vs. smart pointer on Sat, 20 Mar 2010 11:31:27 GMT]]></title><description><![CDATA[<p>Ich würde gerne folgendes umsetzen:</p>
<pre><code class="language-cpp">class A {...};

class B : public A {...};

class Interface {
public:
	virtual A* get() = 0;
};

class Impl : public Interface {
public:
	virtual B* get();
};
</code></pre>
<p>Das compiliert und funktioniert so wie es soll.<br />
Sobald ich aber smart pointer verwende, klappt das (logischerweise) nicht mehr.</p>
<p>Gibt es einen Trick o.ä. das zu umgehen?</p>
<p>Das hier funktioniert nicht (da Rückgabewerte objekte und keine Pointer sind):</p>
<pre><code class="language-cpp">class A {...};

class B : public A {...};

class Interface {
public:
	virtual shared_ptr&lt;A&gt; get() = 0;
};

class Impl : public Interface {
public:
	virtual shared_ptr&lt;B&gt; get();
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1871579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871579</guid><dc:creator><![CDATA[crt32]]></dc:creator><pubDate>Sat, 20 Mar 2010 11:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewerte überschreiben vs. smart pointer on Sat, 20 Mar 2010 11:43:54 GMT]]></title><description><![CDATA[<p>crt32 schrieb:</p>
<blockquote>
<p>Gibt es einen Trick o.ä. das zu umgehen?</p>
</blockquote>
<p>Ja:</p>
<pre><code class="language-cpp">class A {...};

class B : public A {...};

class Interface
{
private:
    virtual A* getInstance() = 0;

public:
    shared_ptr&lt;A&gt; get()
    {
        return shared_ptr&lt;A&gt;(getInstance());
    }
};

class Impl : public Interface
{
private:
    virtual B* getInstance();

public:
    shared_ptr&lt;B&gt; get()
    {
        return shared_ptr&lt;B&gt;(getInstance());
    }
};
</code></pre>
<p>Es ist sowieso immer eine gute Idee, die richtig virtuellen Funktion privat zu halten und nach aussen nur nicht virtuelle Funktionen als Schnittstelle anzubieten, welche allenfalls auf die privaten virtuellen Funktionen zugreifen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871584</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 20 Mar 2010 11:43:54 GMT</pubDate></item></channel></rss>