K
Mein Fall ist eigentlich ein Anwendungsfall für boost::weak_ptr. Das Objekt aus dem Container zu holen, wär eh schon ne schmutzige Lösung (wär aber schnell zu implementieren gewesen. Bin nämlich ziehmlich unter Druck, wegen des Problems: Hab ein Speicherleck wegen zwei Smart-Pointer-Objekten, die sich gegenseitig referenzieren.
Blos hab ich leider in meinem realen Fall keine boost sondern einen selber geschriebenen referenzzählenden Smart-Pointer. Den verwend ich zwar eigentlich nicht mehr, aber der Code ist ein bisschen älter. Umstellen wäre auch ein ziehmlicher Aufwand.
Hab inzwischen Angefangen, mir selber ne weak_ptr-Pendant zu schreiben. Is ja eigentlich garnet so schwierig:
Könnt mal angucken, ob ich was wichtiges vergessen hab
namespace tz
{
template <class T>
class CXtAutoP
{
friend class CXtAutoPRef<T>;
//...
//privater Ctor
CXtAutoP( T* Pointer,
unsigned* puInstanzenZaehler)
:m_Pointer( Pointer),
m_puInstanzenZaehler( puInstanzenZaehler)
{
++*puInstanzenZaehler; //Übernimmt Besitz -> hochzählen!
};
//...
};
}
namespace tz
{
/// Nicht-Besitzende Referenz auf ein mit einem CXtAutoP gemanagetes Objekt
/// (erfüllt dieselbe Aufgabe wie boost::weak_ptr)
template <typename T>
class
CXtAutoPRef
{
///Zeiger auf Objekt
T* m_Pointer;
//Zeiger auf Zähler
unsigned* m_puInstanzenZaehler;
public:
CXtAutoPRef( const etz::CXtAutoP< T>& xap)
:m_Pointer( xap.m_Pointer),
m_puInstanzenZaehler( xap.m_puInstanzenZaehler)
{
}
const etz::CXtAutoP< T>
GetXap()
{
return etz::CXtAutoP<T>( m_Pointer,
m_puInstanzenZaehler);
}
};
}