Ich möchte rohe Zeiger Mitglied zu einigen Smart-Pointer Wrapping Wrapping innerhalb einer Entwicklungsklasse zu verhindern. Besitzer des Objekts unter Zeiger befindet sich außerhalb der Klasse. Also, sieht aus wie boost::shared_ptr
und std::auto_ptr
passt nicht. Das folgende ist ein reduziertes Beispiel:Erstellen von weak_ptr <> aus rohen Zeiger
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
Natürlich induziert es Kompilierungsfehler. Was ist eine korrekte Methode, um weak_ptr
von einem rohen Zeiger zu initialisieren (falls vorhanden)?
möglich Duplikat [shared \ _ptr & schwachen \ _ptr tun Konvertierungen] (http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
Wenn Sie das Löschen dieses Zeigers in Ihrer Klasse verhindern wollen, dann rufen Sie 'delete' nicht darauf auf und stellen Sie keine Accessor-Funktionen bereit, die den Zeiger den Clients verfügbar machen. 'weak_ptr' ist für die nicht-besitzende Ansicht eines Objekts gedacht, das einem' shared_ptr' gehört. Wenn Sie in der Lage wären, diesen Zeiger in ein "weak_ptr" zu stopfen, hätte er keine Ahnung, ob der Zeiger abgelaufen ist, noch hindert er mich daran, 'delete m_bar.lock(). Get(); 'in Ihrer Klasse aufzurufen. Du kannst niemals alles 100% idiotensicher machen. – Praetorian