boost::shared_ptr
- 
					
					
					
					
 hi wie kann boost::shared_ptr::use_count zählen, wieviele zeiger auf sein ziel zeigen und wie kann boost::shared_ptr::unique alle anderen zerstören? 
 
- 
					
					
					
					
 dfhdfhgdf schrieb: wie kann boost::shared_ptr::use_count zählen, wieviele zeiger auf sein ziel zeigen Die Referenzzähler werden irgendwo im Freispeicher angelegt. Wenn Du einen shared_ptr x nach y kopierst, teilen sich x und y sowohl die Referenzzähler als auch den "Objektbesitz". Wird ein shared_ptr zerstört, "meldet er sich ab" beim Referenzzähler. Wenn es der letzte shared_ptr war, löscht er gleichzeitig Referenzzähler und das eigentliche Objekt. dfhdfhgdf schrieb: und wie kann boost::shared_ptr::unique alle anderen zerstören? unique zerstört nichts. 
 
- 
					
					
					
					
 hi hastu schoma wasvon boost::operatorenüberladung ehört? 
 
- 
					
					
					
					
 dfhdfhgdf schrieb: wie kann boost::shared_ptr::use_count zählen, wieviele zeiger auf sein ziel zeigen tut er nicht, er zählt bloss wie viele shared_ptr auf sein ziel zeigen, die aus dem ersten, ursprünglichen shared_ptr erzeugt wurden. wenn du z.b. zwei shared_ptr aus dem selben "rohen" zeiger erstellst, dann kennen sie die gegenseitig nicht, zählen daher falsch, und das objekt wird zu früh gelöscht. 
 daher darf man das auch nicht machen.
 
- 
					
					
					
					
 hustbaer schrieb: tut er nicht, er zählt bloss wie viele shared_ptr auf sein ziel zeigen, die aus dem ersten, ursprünglichen shared_ptr erzeugt wurden. aha, jetzt kapier ichs! danke  
 
- 
					
					
					
					
 und was ist der unterschied zwischen auto_ptr und shared_ptr? 
 
- 
					
					
					
					
 std::auto_ptr hat ownership transfer und boost::shared_ptr (auch std::tr1::shared_ptr) hat referenz-zählung. 
 
- 
					
					
					
					
 std::tr1::shared_ptr<A> aPtr1(new A()); // Zeiger auf A std::tr1::shared_ptr<A> aPtr2(aPtr1); // aPtr1 und aPtr2 zeigen auf das selbe A-Objekt aPtr1 = aPtr2; // beide Zeiger zeigen immer noch auf das selbe A-Objektstd::auto_ptr<A> aPtr1(new A()); // aPtr1 zeigt auf A-Objekt std::auto_ptr<A> aPtr2(aPtr1); // aPtr2 zeigt jetzt auf A-Objekt, aPtr1 ist aber null! aPtr1 = aPtr2; // aPtr1 zeigt jetzt wieder auf A-Objekt, aPtr2 ist null!shared_ptr == geteilter Besitz, mehrere Zeiger auf ein Objekt möglich 
 auto_ptr == Besitzweitergabe, immer nur ein Zeiger auf ObjektAber bei beiden gilt: Der Letzte macht das Licht aus!  
 
