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
aan einen Smart-Pointer binden, da dieser dann versucht, den Speicher mitdeletefreizugeben.Zudem hat
boost::scoped_ptreine 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.