Grosses Objekt zurueckgeben



  • Hallo,

    ich habe eine Klasse Foo, bei der das Kopieren recht komplex ist, sprich Copy Ctor = langsam.

    Ich muss in einer Methode einen Vektor von Foo zurueckgeben:

    class Bar {
    public:
       vector<Foo> computeStuff();
    
    };
    

    Meine Frage ist nun: Wie mach ich das am effizientesten. Vom Design her waere das am schoensten:

    1. Rueckgabe per lokaler Variable und Kopie:
    vector<Foo> Bar::computeStuff() {
      vector<Foo> ret;
      .. ret fuellen
      return ret;
    }
    

    Oder ware es vielleicht das effizienter:
    2) Eine Membervariable anlegen und dann eine konstante Referenz darauf liefern:

    class Bar {
    vector<Foo> m_Foos;
    
    const vector<Foo>& Bar::computeStuff() {
      m_Foos.clear();
      .. m_Foos fuellen
      return m_Foos;
    }
    
    };
    

    Was denkt ihr ist effizienter/besser? (PS: Ich benutze Linux und g++)




Anmelden zum Antworten