boost scoped_ptr<>
-
hi
int a = 10; boost::scoped_ptr<int> ptrVar; ptrVar = &a;
warum geht das nicht? ptrVar ist doch nur ein template-zeiger, von daher sollte man dem zeiger doch einfach per referenz die addresse geben können.
noch was:
boost::scoped_ptr<int> ptrVar; *ptrVar = 10;
warum kann man hier nicht einfach den pointer dereferenzieren und ihm einen wert zuweisen?
vielen dank im vorraus
-
Du solltest keine Stackvariablen wie
a
an einen Smart-Pointer binden, da dieser dann versucht, den Speicher mitdelete
freizugeben.Zudem hat
boost::scoped_ptr
eine Methodereset()
, mit der du neue Zeiger zuweisen kannst. Dadurch, dass der Zuweisungsoperator nicht direkt angeboten wird, sollen Fehler durch implizite Konvertierungen eingedämmt werden (das gleiche beim Konstruktor).Zu deiner zweiten Frage: Sag doch bitte, was nicht geht (Fehlermeldung oder ähnliches).
-
ich danke dir erstmal.
Nexus schrieb:
Zu deiner zweiten Frage: Sag doch bitte, was nicht geht (Fehlermeldung oder ähnliches).
klar, mein fehler:
This application has requested the Runtime, to terminate it an unusual way.
-
Ah klar. Dass ich das nicht gesehen habe...
Du hast gar keinen Speicher reserviert.
boost::scoped_ptr<int> ptrVar(new int); *ptrVar = 10;
Oder:
boost::scoped_ptr<int> ptrVar; ptrVar.reset(new int); *ptrVar = 10;
Oder direkt:
boost::scoped_ptr<int> ptrVar(new int(10));
-
alter, danke.