Dieser Code führt zu einem Speicherverlust, weil rA als ungültig initialisiert wird, wenn es erstellt wird. Wann kann ich dieses Problem beheben?Wie verhindere ich den Speicherverlust von unique_ptr
Verwenden Sie shared_ptr oder hoffe auf zukünftige Compiler-Versionen, um diesen schlechten Code zu fangen?
#include <memory>
using namespace std;
struct A {};
void use(const A& a) {};
unique_ptr<A> foo()
{
unique_ptr<A> pa(new A());
return pa;
}
int main()
{
const A& rA = *foo(); // rA is unusable, initialized with invalid reference (invalidated by destruction of temporary unique_ptr returned from foo)
use(rA);
}
Was genau ist Ihr Problem? Was meinst du mit "locker"? –
Das temporäre Objekt wird am Ende der Anweisung (Semikolon) zerstört, und Sie haben eine freie Referenz. –
"lose" = "Verlust", vermutlich. –