La vedo dura estrapolare cose da Boost, per via degli include custom che usa.
Comunque se cerchi smart_ptr su Google qualche buona implementazione non standard la trovi.
(Non standard intendo l'interfaccia)
La vedo dura estrapolare cose da Boost, per via degli include custom che usa.
Comunque se cerchi smart_ptr su Google qualche buona implementazione non standard la trovi.
(Non standard intendo l'interfaccia)
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
intanto grazie.
Ho trovato una libreria di smart pointers.
non sono riuscito a capire pero come assegnare un indirizzo di una variabile puntatore esistente ad uno smart pointer , è possibile?
1)dopo che ho assegnato l' indirizzo della variabile allo smart pointer vengono liberate le risorse puntate da quell'indirizzo automaticamente?
2)avevo una funzione del tipo: void classe::SetData(cbase** pBase) , come faccio ad utilizzare gli smart pointer in questo caso?
ciao
ad es ho il seguente problema:
vorrei dichiarare pElement una sola volta come tipo base CBaseIfc(classe da cui derivano tutte le altre sotto)in cima e assegnargli una delle istanze a seconda del contenuto di localname.codice:smart_ptr<CBaseIfc> pElement; if(localName.compare(L"IfcWallStandardCase")==0) smart_ptr<CWallStandardCaseIfc> pElement(new CWallStandardCaseIfc); if(localName.compare(L"IfcSlab")==0) smart_ptr<CSlabIfc> pElement(new CSlabIfc());
ma per fare questo devo poter assegnare un indirizzo a pElement senza ridichiararlo.
mi serve per implementare il polimorfismo sulle classi derivate.
e se provo a fare:
mi da un errore sulla concersione dei tipicodice:pElement = smart_ptr<CRelContainedInSpatialStructure>(new CRelContainedInSpatialStructure);
e possibile?
grazie.
Hai il link?Ho trovato una libreria di smart pointers.
In ogni caso mi sono ricordato che tempo fa avevo fatto una riduzione degli shared_ptr di Boost per un compilatore non supportato più. E' un header unico con la stessa interfaccia di Boost ma iniettato nel namespace std.
Se ti interessa lo trovi qui:
www.flaviomoretto.it/cpp/shared_ptr.hpp
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
Tieni comunque conto che l'installer di boost può installare anche solo i pezzi che ti servono (nello specifico gli smart pointer), per cui sarebbe un'installazione estremamente leggera. D'altra parte un'installazione completa delle boost potrebbe fornirvi strumenti estremamente comodi che vi permetterebbero di risparmiare tempo in diversi task comuni (personalmente, ad esempio, trovo i cast boost di una comodità estrema).Originariamente inviato da giuseppe500
perchè utilizziamo sourcesafe e ci lavoriamo in 5 e tutti dovrebbero installarsi boost , e questo non è purtroppo possibile.
Amaro C++, il gusto pieno dell'undefined behavior.
grazie shodan , vorrei utilizzare il tuo smart pointer solo che non riesco a compilarlo con il vs 2003.
Penso sia un problema di namespaces , ti posto gli errori:
c:\IFC\SAX\sax15122009\shared_ptr.hpp(255): error C2027: use of undefined type 'NX::wk_counter'
c:\IFC\SAX\sax15122009\shared_ptr.hpp(250) : see declaration of 'NX::wk_counter'
c:\IFC\SAX\sax15122009\shared_ptr.hpp(182): error C2039: 'sp' : is not a member of 'NX::detail::sh_counter'
c:\IFC\SAX\sax15122009\shared_ptr.hpp(134) : see declaration of 'NX::detail::sh_counter'
inoltre:
ho visto che usi l'auto_ptr , che ho letto non essere compatibile con i container stl, la tua libreria è compatibile con i container stl?
grazie.
Errore mio. La riga:
va cambiata incodice:#define std NX
Purtroppo faccio sempre confusione tra i #define e i typedef che hanno sintassi invertita.codice:#define NX std
Per il resto dovrebbe compilare senza problemi.
non esageriamo: è una palese scopiazzatura che mi serviva per una specifica esigenza, altrimenti avrei usato direttamente boost.tua libreria
Comunque lo shared_ptr deve essere compatibile con la STL, sennò che l'hanno messo a fare?
Ricorda comunque che questo è solo un surrogato, da cambiare con boost::shared_ptr (se presente - lo so che non ce l'hai o che per adesso non la usi, ma se cambiassi idea... ) o meglio con std::tr1::shared_ptr (quando disponibile - nei più recenti compilatori insomma - e ragione per cui inietto il tutto nel namespace std).
Per quanto riguarda l'auto_ptr.
Lo uso solo per acquisirlo. Una volta acquisito, l'ownership del puntatore sotto stante passa allo shared_ptr con tutto quello che ne consegue.
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.