shared_ptr pointeur null et affectation

Je veux utiliser shared_ptr comme j'utilise un réel pointeur. Je voulais être capable de faire des choses comme

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

mais il n'est pas implémentée par défaut.

J'ai changé le code source de la shared_ptr de la bibliothèque boost en ajoutant

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()
{
}

La seule chose est que si je fais un = -1; compiler et de me donner un pointeur null, ce qui ne devrait pas être un problème parce que, normalement, vous ne pouvez pas affecter un entier à un pointeur.

Donc ma question est, est-ce une bonne façon de mettre en œuvre cette ou ai-je oublié des cas qui pourraient bloquer l'application? Parce que partout où je regardais, la seule façon que je voyais pour obtenir un nullpointer pour un shared_ptr a été d'appeler le constructeur par défaut qui n'est pas très élégant dans le code par rapport à: ptr = 0;.

Un littéral 0 est un null le pointeur constant est donc implicitement convertible en un valeur de pointeur null de tout type pointeur déjà.
+1 ", j'ai changé le code source de la shared_ptr de la bibliothèque boost" 😉
pourquoi ne pas utiliser le C++11 nullptr à la place?

OriginalL'auteur Michael Ferris | 2012-04-22