View Full Version : [C++] [Boost] Scoped pointers e costruttori
Ciao a tutti!
Ho un problema prettamente stilistico per quanto riguarda gli scoped pointers delle librerie Boost.
Mettiamo il caso voglia allocare dinamicamente un oggetto e passare un parametro al suo costruttore.
Faccio in questo modo:
Class* objectptr = new Class(arg1, arg2);
boost::scoped_ptr<Class> object_sptr(objectptr);
E' l'unico modo?
Ho dato un occhio alla documentazione ma non ho trovato niente che facesse al mio caso.
Grazie e ciao ;)
ovviamente puoi fare anche così:
boost::scoped_ptr<Class> object_sptr(new Class(arg1, arg2));
ma in ogni caso ricordati sempre di controllare che l'operatore new non ti abbia restituito NULL, cosa che può succedere se sei a corto di memoria.
non conosco le Boost perché non ho mai avuto occasione di usarle, ne' saprei dove trovare la documentazione di questo scoped pointer; il codice che ho scritto è solo una naturale semplificazione del tuo codice :p
ovviamente puoi fare anche così:
boost::scoped_ptr<Class> object_sptr(new Class(arg1, arg2));
ma in ogni caso ricordati sempre di controllare che l'operatore new non ti abbia restituito NULL, cosa che può succedere se sei a corto di memoria.
non conosco le Boost perché non ho mai avuto occasione di usarle, ne' saprei dove trovare la documentazione di questo scoped pointer; il codice che ho scritto è solo una naturale semplificazione del tuo codice :p
Ovviamente anche io la prima volta che mi sono trovato davanti uno scoped pointer ho fatto così, il problema è che... non funziona :sofico:
A quanto ho visto permette la sintassi "abbreviata" permette di richiamare solo il costruttore a zero argomenti, e QUI (http://www.boost.org/doc/libs/1_35_0/libs/smart_ptr/scoped_ptr.htm) non ho trovato niente che facesse al caso mio... possibile che non sia prevista una sintassi "concisa" come quella che mi hai proposto? (che è la sintassi naturale con cui mi sarei aspettato di poterlo utilizzare).
se funziona come hai scritto tu mi pare che debba per forza funzionare anche come ho scritto io... altrimenti prova così:
boost::scoped_ptr<Class> object_sptr = new Class(arg1, arg2);
ma questo credo proprio che non dovrebbe compilare visto che il costruttore è dichiarato explicit.
se funziona come hai scritto tu mi pare che debba per forza funzionare anche come ho scritto io... altrimenti prova così:
boost::scoped_ptr<Class> object_sptr = new Class(arg1, arg2);
ma questo credo proprio che non dovrebbe compilare visto che il costruttore è dichiarato explicit.
Ok ho preso un granchio grande quanto una casa, ho riscritto una classe semplice semplice e mi ha accettato tranquillamente
boost::scoped_ptr<Class> object_sptr(new Class(arg1, arg2));
Ovviamente l'assegnazione con l'uguale (che sarebbe stata comoda) non è permessa, ma è sufficiente rilasciare il puntatore e ridichiararlo.
Ora devo solo capire perchè nel programma in cui lo stavo usando non voleva funzionare :D
Thank you per l'aiuto (a quest'ora di sera non pensavo di trovarne) :O
ovviamente puoi fare anche così:
boost::scoped_ptr<Class> object_sptr(new Class(arg1, arg2));
ma in ogni caso ricordati sempre di controllare che l'operatore new non ti abbia restituito NULL, cosa che può succedere se sei a corto di memoria.
A meno che uno non voglia farsi del male usando std::nothrow dovrebbe venire gettata un'eccezione, non ritornato 0.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.