Quand souhaitez-vous utiliser un std::auto_ptr au lieu de boost::shared_ptr?

Nous avons assez bien déplacé à l'aide de boost::shared_ptr dans l'ensemble de notre code, nous avons cependant encore quelques cas isolés où nous utilisons std::auto_ptr, y compris les classes singleton:

template < typename TYPE >
class SharedSingleton
{
public: 
    static TYPE& Instance()
    {
        if (_ptrInstance.get() == NULL)
            _ptrInstance.reset(new TYPE);
        return *_ptrInstance;
    }

protected: 
    SharedSingleton() {};

private:
    static std::auto_ptr < TYPE > _ptrInstance;
};

J'ai dit qu'il y a une très bonne raison pour laquelle cela n'a pas été fait shared_ptr, mais pour la vie de moi je ne comprends pas pourquoi? Je sais que auto_ptr finira par être marqué comme déprécié dans le prochain standard, donc j'aimerais sais quoi/comment je peux remplacer cette mise en œuvre.

Aussi, existe-il d'autres raisons pour lesquelles vous devez envisager d'utiliser un auto_ptr au lieu d'un shared_ptr? Et voyez-vous des problèmes pour le déplacement à shared_ptr dans l'avenir?


Edit:

  1. Donc, en réponse à la question "puis-je remplacer en toute sécurité auto_ptr avec shared_ptr dans le code ci-dessus", la réponse est oui, mais je vais prendre un petit gain de performance.
  2. Quand auto_ptr est finalement marqué comme déprécié et nous nous déplaçons sur std::shared_ptr, nous aurons besoin de tester notre code pour faire en sorte que nous sommes en respectant les différentes sémantique de propriété.
  • auto_ptr est remplacé, en raison surtout de la façon de traiter avec la sémantique de déplacement, que le maintien de la compatibilité ascendante est plus propre que de le mettre à jour, dans ce cas. La nouvelle classe doit *croise les doigts* être presque une baisse-dans le remplacement, si.
InformationsquelleAutor Alan | 2009-08-04