<?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[vector von abstrakter Klasse - wie implementieren?]]></title><description><![CDATA[<p>Ich hab eine abstrakte Klasse X und eine weitere Klasse Y, die einen std::vector mit Instanzen von X besitzt. Darüber hinaus, soll es in Y eine Methode, um weitere Instanzen zu X hinzuzufügen.</p>
<p>Mein bisheriger Ansatz war:</p>
<pre><code>class Y {
public:
    std::vector&lt;std::unique_ptr&lt;X&gt;&gt; v;

    void add(X* obj) {
        v.emplace_back(obj);
    }
}
</code></pre>
<p>Ich finde den Ansatz nicht so gut, weil sowas wie</p>
<pre><code>Y y;
y.add(new X_subclass());
</code></pre>
<p>so aussieht, als hätte man vielleicht ein delete vergessen.</p>
<p>Gibt es bessere Möglichkeiten, mein Vorhaben zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334610/vector-von-abstrakter-klasse-wie-implementieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 15:08:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334610.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Sep 2015 19:54:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector von abstrakter Klasse - wie implementieren? on Sat, 26 Sep 2015 19:54:03 GMT]]></title><description><![CDATA[<p>Ich hab eine abstrakte Klasse X und eine weitere Klasse Y, die einen std::vector mit Instanzen von X besitzt. Darüber hinaus, soll es in Y eine Methode, um weitere Instanzen zu X hinzuzufügen.</p>
<p>Mein bisheriger Ansatz war:</p>
<pre><code>class Y {
public:
    std::vector&lt;std::unique_ptr&lt;X&gt;&gt; v;

    void add(X* obj) {
        v.emplace_back(obj);
    }
}
</code></pre>
<p>Ich finde den Ansatz nicht so gut, weil sowas wie</p>
<pre><code>Y y;
y.add(new X_subclass());
</code></pre>
<p>so aussieht, als hätte man vielleicht ein delete vergessen.</p>
<p>Gibt es bessere Möglichkeiten, mein Vorhaben zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469136</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Sat, 26 Sep 2015 19:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to vector von abstrakter Klasse - wie implementieren? on Fri, 02 Oct 2015 06:32:48 GMT]]></title><description><![CDATA[<pre><code>#include &lt;vector&gt;
#include &lt;memory&gt;
#include &lt;utility&gt;

class X
{
public:
  virtual ~X() {}
};

class X_subclass
  : public X
{};

class Y
{
  std::vector&lt;std::unique_ptr&lt;X&gt;&gt; v;

public:
  void add(X* obj)
  {
    v.emplace_back(obj);
  }

  void add(std::unique_ptr&lt;X&gt; obj)
  {
    v.emplace_back(std::move(obj));
  }

  template &lt;typename T, typename ...Args&gt;
  void add(Args&amp;&amp; ...args)
  {
    v.emplace_back(std::unique_ptr&lt;T&gt;(new T(std::forward&lt;Args&gt;(args)...)));
  }
};

int main()
{
  Y y;
  y.add(new X_subclass());
  y.add(std::unique_ptr&lt;X&gt;(new X_subclass()));
  y.add(std::make_unique&lt;X_subclass&gt;()); // mit C++14 oder selbstgemachtem make_unique&lt;..&gt;(..)
  y.add&lt;X_subclass&gt;();
}
</code></pre>
<p>// edit<br />
Beispiel vervollständigt und Variante mit Variadic-Templates hinzugefügt. Der Ansatz mit Variadic-Templates entspricht im Wesentlichen einem selbstgemachten und versteckten std::make_unique&lt;..&gt;(..).</p>
<p>// edit1<br />
Formatierung bereinigt</p>
<p>// edit2<br />
Bei std::forward&lt;..&gt; das fehlende Template-Argument ergänzt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469140</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 02 Oct 2015 06:32:48 GMT</pubDate></item></channel></rss>