guard schützt auch return?



  • class A:
     private:
      bool _bStop;
    
     bool A::isStop()
     {
      Guard g();
    
      return _bStop;
     }
    };
    

    Diese Guard-Klassen gibt es ja in unterschiedlichen Ausprägungen, deshalb spare ich mir hier Implementierungsdetails. Letztendlich, werden die Konstruktor und Destruktor Aufrufe durch den Scope ausgenutzt. Meine Frage ist, ist das wirklich threadsicher?

    oder müßte es so sein?

    bool A::isStop()
     {
      bool b;
      Guard g();
      b=_bStop
      return b;
     }
    


  • Variante A ist okay.



  • ich versteh nur nicht so ganz warum. Der Return-Wert kann nicht vor dem Destruktor ausgeführt werden oder? Oder wird der Return-Wert irgenwie als kopie im 'Funktions-Stack' gehalten?



  • Das hat Dich eigentlich nicht zu interessieren (vom Standard-Standpunkt aus zumindest), es ist einfach so vorgegeben, und ein Compiler, der das anders handhabt, ist nicht komform.

    Praktisch sieht es auf x86ern so aus, dass der Returnwert in einem Prozessorregister gelagert wird, bevor der Stack abgebaut wird. Ich weiss allerdings nicht, wo temporäre Objekte in diesem Zeitraum "leben".


Log in to reply