C
Gandalfus schrieb:
volkard schrieb:
weil es dein programm tötet. du rufst den op= nit einem linken argument auf, das gar nicht initialisiert ist (das noch gar kein lebendes objekt ist).
Wenn ich den Konstruktor auf rufe ist das object doch instanziert. Sonst könnte ich im Konstruktor ja auch nicht auf Object Variablen zugreifen.
Mein Ziel ist dass ich keine redundanten code habe.
bei copy-konstruktion wird ein neues objekt initialisiert. beim copy-op= dagegen muss zunächst der alte inhalt des objekts zerstört werden, bevor es als kopie des arguments neu initialisiert wird. und hier liegt das problem: wenn die zerstörung des alten inhalts nicht trivial ist, insbes. bestimmte invarianten erfüllt sein müssen, dann ist es logischerweise nicht möglich, ein objekt, das nicht explizit initialisiert wurde, zu benutzen. was C++ angeht, so ist ein objekt fertig konstruiert, sobald der konstruktor-körper ausgeführt wird, deshalb wird dich der compiler auch niemals an obigem konstrukt hindern. unter logisch-semantischen gesichtspunkten ist es dagegen ein grober fehler. im gegensatz dazu geht copy&swap den umgekehrten weg: hier wird op= mittels des copy-ctors implementiert. redundanz zu vermeiden, ist ein sinnvolles ziel, allerdings in der gegenwärtigen sprache (in abwesenheit von ctor-delegation) ohnehin nicht immer zu vermeiden, insofern sollte es an dieser stelle auch nicht unbedingt top-priorität haben.