Vector mit Objekten einer Klasse füllen - ohne Standardkonstruktoraufruf



  • vector<class Klasse> Vec;
    
    Klasse Kl_1("Peter", "Pan", 2003, 4000);
    Vec.push_back(Kl_1);
    // bzw.
    Vec.emplace_back("Volker", "Prim", 2013, 44000);
    

  • Mod

    PluMi schrieb:

    - die push_back Methode fällt auf Grund des zusätzlichen Kopierkonstruktors aus. Habe einen Konstruktor und dabei soll es bleiben.

    Ich wette, du hast den Kopierkonstruktor nicht deaktiviert (und solltest du höchstwahrscheinlich auch nicht).

    Wahrscheinlich verstehst du obigen Absatz auf deinem Wissensstand gar nicht. Da hilft nur, mit einem guten(!) Buch weiter zu lernen. Jedenfalls präsentierst du gerade eine Menge Halbwissen (nicht nur das obige, aber das ist eines der krasseren Beispiele). Das ist nicht direkt schlimm, aber du solltest erfahren, dass nicht alles, was du derzeit zu wissen glaubst, so richtig ist.



  • PluMi schrieb:

    - die push_back Methode fällt auf Grund des zusätzlichen Kopierkonstruktors aus. Habe einen Konstruktor und dabei soll es bleiben.

    Dann nimm emplace_back statt dessen.
    Du kannst auf jeden Fall nicht auf Objekte zugreifen die du nicht erstellt hast. Und wenn du weder Default-Ctor noch Copy-Ctor hast, dann ist die einzige Möglichkeit Objekte in einem vector zu erstellen eben emplace_back .

    ps: Wenn du den Zuweisungsoperator nicht sperrst, wieso sperrst du dann den Copy-Ctor?
    WTF?


  • Mod

    hustbaer schrieb:

    ps: Wenn du den Zuweisungsoperator nicht sperrst, wieso sperrst du dann den Copy-Ctor?
    WTF?

    Anfänger. Sei nicht verwirrt. Er weiß nur nicht genau, was er da gerade gesagt hat.

    @PluMi: Du siehst, wie verwirrend einige deiner Äußerungen sind, wenn man sie wortwörtlich nimmt 🙂 .



  • @SeppJ: Du hast ziemlich Recht mit meinem gefährlichen Halbwissen 😉 Nun weiß ich aber wo ich ansetzen muss.. jetzt muss ich nur noch die Zeit finden es mir anzueignen 😃

    @Caligulaminus: 100 Punkte! Genau das löst mein Problem! Versteh nur noch nicht warum ein Vector mit SIZE- Angabe einen Standardkonstruktor braucht und einer ohne keinen 😕


  • Mod

    Versteh nur noch nicht warum ein Vector mit SIZE- Angabe einen Standardkonstruktor braucht und einer ohne keinen

    Weil ein vector mit SIZE bElementen diese alle doch erzeugen muss. Wie sonst als mit dem Default-Konstruktor?



  • [haarklaub]
    Naja bei C++98 macht er nur eins mit dem Default-Ctor, und kopiert das dann SIZE mal 🤡
    [/haarklaub]


  • Mod

    hustbaer schrieb:

    [haarklaub]
    Naja bei C++98 macht er nur eins mit dem Default-Ctor, und kopiert das dann SIZE mal 🤡
    [/haarklaub]

    Interessant, diesen Unterschied zwischen C++98 und C++11 kannte ich noch gar nicht.

    * merk für zukünftige Klugscheißereien *

    Den haben sie nicht an die große Glocke gehängt. Bist du beim Lesen des Standards selber darüber gestolpert? Oder gibt's irgendwo eine Sammlung solcher Miniunterschiede?


  • Mod

    @SeppJ: Es rührt von der riesisgen Default-Argument Scheiße bei C++03. Schau dir mal die Konstruktoren in (2) und (3) im Vergleich an, dann merkst du es sofort.



  • @SeppJ
    Ich wusste dass es in C++98 so war. War in irgend einem Fred hier im Forum mal Thema.
    Dass es in C++11 geändert wurde wusste ich nicht. Hab' aber nachgesehen, weil ich schon so nen Verdacht hatte dass Arcoth Recht haben könnte 🙂


Anmelden zum Antworten