In letzter Zeit haben partiell-geformte (partially-formed) Objekte als natürlicher Zustand von moved-from Objekten an Zugkraft gewonnen.
Alexander Stepanov definiert sie in seinem wegweisenden Buch Elements of Programming (EoP) als einen Zustand, in dem die einzig gültigen Operationen Zuweisung und Zerstörung sind. Dieser Status war und ist für Hochleistungscode und die C++-Garantie "don't pay for what you don't use" von wesentlicher Bedeutung.
Nach einer kurzen Einführung werden wir uns ansehen, wo in der C/C++-Sprache solche Zustände auftraten, noch bevor es ein "C++" oder den Namen "partiell geformt" gab und sicherlich bevor die Diskussion über den moved-from Zustand begann. Wir zeigen damit, dass egal, wie Sie über das partiell-geformte Zustandskonzept denken, es als platonisches Ideal in der Welt der Computerprogrammierung vorhanden ist. Wir werden nichts weniger versuchen, als die EoP-Behandlung weiter in das moderne
C++ zu übertragen. Wir werden feststellen, dass die Move-Semantik, wie
sie derzeit im Standard definiert ist, zu stark ist, da sie gegen "don't pay for what you don't use" verstößt, und einen Überblick über schwächere Alternativen geben, die ebenso leicht zu erlernen und zu begründen sind, aber natürlichste und effizienteste Implementierungen von Typen ermöglichen, die sie verwenden. Ein Paradebeispiel wird flat_map sein.
Wir werden auch zeigen, wie Entwickler, die sich mit dem partiell-geformten Zustand unwohl fühlen, ihn ohne oder mit nur geringen Kosten (weder hinsichtlich der Lesbarkeit des Codes noch des
Laufzeitverhaltens) vermeiden können, und anhand dieser Beispiele ein neues (altes) Paradigma für API-Design vorschlagen: sicher und unsichere Funktionen (im Sinne von Sean Parent).