Übergabe von Objekten via Reference



  • Folgendes Problem:

    Ich habe ein Objekt mit sehr sensiblen Daten zu verwalten. Jetzt werden diese Daten aber von vielen Modulen benötigt, um kleinere vorab-Berechnungen durchführen zu können, die das ursprüngliche Objekt verändern können aber auf keinen Fall sollen.

    Bisher mache ich es so:

    // board enthält sensible Daten
    
    nodes = recursion(board, atoi(instruction_list[1]), false);
    
    // board wird verändert darf deshalb nicht mit der Reference arbeiten
    
    nodes_t recursion(const board_c & origin, const int depth, const bool complex) {
      board_c board;
    
      // initialize
    
      board.copy(origin);
    
      // Berechnungen
    
      if (complex == true) {
        return complex_recursion(board, depth, 0);
      }
    
      return simple_recursion(board, depth);
    }
    

    Könnte ich auch das board einfach als Kopie übergeben, also ohne den Referenz-Operator und nicht mehr als const? Sorry wegen der naiven Frage, aber ich weiss es nicht genau und zum Probieren bin ich bisher nicht gekommen. Die Frage dient auch für mich zum weiteren Verständnis, wie Objekte bei der Übergabe kopiert werden.

    😕



  • Wenn Funktionsargumente kopiert werden sollen, sollten sie möglichst "by value" übergeben werden, da dies dem Compiler mehr Möglichkeiten für Optimierungen ermöglicht.
    In Deinem Beispiel benötigt board_c dafür einen, der copy Methode entsprechenden Kopierkonstruktor.



  • Vielleicht wäre es sinnvoller, in board_c einen Backtracking-Mechanismus einzubauen, also eine Art Status-Stack? Dann könntest du das Objekt an die Funktionen als nicht-const übergeben und einfach vor dem Job board_c::push_status() sowie nach dem Job board_c::pop_status() aufrufen.

    Stefan.


Anmelden zum Antworten