C++0x, Move Special Member Functions



  • Hallo!

    Wollte nur mal darauf aufmerksam machen, dass es seit einer Woche ein interessantes Papier zum Thema "Defining Move Special Member Functions" gibt. Autoren sind Bjarne Stroustrup und Lawrence Crowl.

    "move constructor" und "move assignment operator" bekommen damit den "special member function"-Status. Diese können automatisch vom Compiler generiert werden und lassen sich per "=default;"-Syntax erzwingen.

    Ohne die Implikationen total zu überblicken, kann ich doch sagen, dass das nach einer tollen Idee aussieht. Was bedeutet das? Beispielsweise wird folgende Klasse

    struct person {
      std::string name;
      int geburtsjahr;
    };
    

    ohne, dass man etwas dazutun muss, effizient "movable". Neben Copy-Ctor und Copy-Assignment-Operator werden auch die move-Varianten vom Compiler erzeugt, weil alle Elemente einen move-construktor und einen move-assigment-operator besitzen -- bei den fundamentalen Typen tut man einfach so, als hätten sie diese move-Funktionen.

    Meinungen? 🙂



  • cool 👍

    Mir fällt spontan keine Situation ein, in der eine Klasse mit default copy-ctor nicht automatisch movable sein sollte 🙂



  • otze schrieb:

    Mir fällt spontan keine Situation ein, in der eine Klasse mit default copy-ctor nicht automatisch movable sein sollte 🙂

    Die gibt es aber schon. Der move-ctor wird nur implizit generiert, wenn alle Elemente einen move-ctor besitzen und der Benutzer keinen copy-ctor deklariert hat. Das hat auch was mit Exception-safety zu tun. Ein move-ctor, der eine Exception schmeißen könnte, ist einfach unbrauchbar. Wenn also ein Element dabei ist, was nicht "move-optimiert" ist, wird der move-ctor nicht mehr generiert, weil der Aufruf des copy-ctors des Elements ja eine Ausnahme werfen könnte.

    Gruß,
    SP


Anmelden zum Antworten