Ich würde es vorziehen, entweder diese:
std::unique_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
Solver& STP = *S;
oder dies:
std::shared_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
std::shared_ptr<Solver> STP = S;
Sowohl ein Problem mit dem Code vermeiden haben Sie da: wir nicht entscheiden müssen tun, was Zeiger auf Rufen Sie delete
an, wenn die Objekte den Bereich verlassen (oder erinnern Sie sich an die Notwendigkeit, delete
überhaupt aufzurufen). Stattdessen warten wir nur, bis die Variablen den Bereich verlassen, dann wird das Objekt Solver
automatisch entfernt. STP
ist im ersten Fall eindeutig nur eine andere Art des Zugriffs auf das Objekt, während es im Umfang ist, im zweiten Fall ist es ein unabhängiger "Miteigentümer" des Objekts und beide Zeiger können unabhängig voneinander neu zugewiesen werden.
Das ist ein * sehr hässlich * bedeutet, zwei Variablen gleichzeitig zuzuweisen. * (brenne code [rs] so mit Feuer) * – user7116
Es gibt viele Gründe, warum dieser Code einfach scheiße ist. Der doppelte Zuweisungsteil ist nur einer von ihnen. RAII nicht zu verwenden ist ein anderes. –
Ja ... Ich wusste nicht einmal, dass das legal ist, und das habe ich noch nie gesehen! – steveha