shared_ptr null-Zeiger und-Zuordnung

Will ich mit shared_ptr, wie ich das verwenden würde, eine tatsächliche Zeiger. Ich wollte in der Lage sein, Dinge zu tun, wie

shared_ptr<int> a;
a = new int(5);
a = 0;
shared_ptr<int> foo()
    return 0;

aber es ist nicht standardmäßig implementiert.

Ich änderte den Quellcode der shared_ptr der boost-Bibliothek durch hinzufügen

template<class Y> void operator=( int i )
{
    reset(i);
}
template<class Y> void reset(int i)
{
    this_type(i).swap(*this);
}
template<class Y> void operator=( Y * p )
{
    reset(p);
}
shared_ptr(int i): px(0), pn()
{
}

Die einzige Sache ist, dass wenn ich a = -1; es wird kompiliert und geben Sie mir ein null-Zeiger ist, das sollte nicht das problem sein, denn normalerweise kann man nicht zuweisen einer integer-Wert in einen Zeiger.

Also meine Frage ist, ist dies eine richtige Weg, um dies zu implementieren, oder habe ich vergessen den Fällen, die Abstürzen der Anwendung? Weil überall wo ich geschaut, die einzige Möglichkeit, die ich sah, um ein nullpointer für einen shared_ptr wurde, um die Standard-Konstruktor, der nicht besonders elegant im code im Vergleich: ptr = 0;.

Eine wörtliche 0 ist ein null-Zeiger-Konstanten, so ist implizit, umwandelbar zu einem null-Zeiger-Wert von jedem Zeiger-Typ schon.
+1 "ich änderte den Quellcode der shared_ptr der boost-Bibliothek" 😉
warum nicht die C++11 nullptr statt?

InformationsquelleAutor Michael Ferris | 2012-04-22

Schreibe einen Kommentar