|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[BOOST/C++]Problemi con shared_ptr
vi pongo un problema...
quello che faccio più o meno è questo: Codice:
while(ne_ho_voglia){
std::vector<boost::shared_ptr<Pippo> > vettore;
popolaVettore(vettore); // un pò più complesso di così, ma la parte importante è che prende un riferimento del vector e lo riempie
ClasseEnorme.usaVettore(vettore); //altro riferimento e non so che faccia (non ho i sorgenti)
}
perchè allora se in ClasseEnorme c'è un riferimento al vettore questi mi vengono distrutti appena ciclo la volta dopo? c'è un errore banale da qualche parte? grazie, ciao!!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
mi ero scordato di segnalare che, controllando use_count alla fine del ciclo, dà due...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
non capisco bene il tuo codice, scusa.
Come popoli il vettore? Devi farci vedere anche quella parte. Comunque il vettore appena esce dallo scope invoca i distruttori di tutti i tuoi shared_ptr, decrementando i loro counter. Se ricordo bene il reference counter di uno shared_ptr incrementa quando invochi il copy constructor o l'assignement operator di shared_ptr. Se riempi il vettore con questo codice, per esempio: Codice:
vettore.push_back(boost::shared_ptr<Pippo>(oggettoPippo)); Codice:
vettore.push_back(oggettoPippo); |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
ok, ti rilancio un pò di codice!
Codice:
while (TANTO) {
std::vector<boost::shared_ptr<PIPPO> > pippi = prendiPippi(); //ritorna una copia di un vettore pieno
classeEnorme.funzioneAssurda(pippi); //passa vettore per riferimento
std::vector<boost::shared_ptr<PIPPO> > pippiNuovi = classeEnorme.ridammiPippi();
/*per ogni pippo stampo posizione e numero di riferimenti in shared_ptr*/
}
Quote:
ciao ciao!!! |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Sara` il venerdi` pomeriggio ma trovo il codice troppo offuscato.
Comunque la mia idea al momento e` che tutti gli shared_ptr escono dallo scope ad ogni ciclo decrementando i contatori fino a zero. Immagino che i primi shared_ptr stiano dentro pippi che esce dallo scope ad ogni ciclo e i secondi in pippinuovi che esce dallo scope a sua volta... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:27.



















