Nous testons une bibliothèque sous C ++ 11 (ie, -std=c++11). La bibliothèque utilise auto_ptret ce modèle:
Foo* GetFoo()
{
autoptr<Foo> ptr(new Foo);
// Initialize Foo
ptr->Initialize(...);
// Now configure remaining attributes
ptr->SomeSetting(...);
return ptr.release();
}
C ++ 11 déconseillé auto_ptr, nous voulons donc nous en éloigner.
Cependant, le code prend en charge à la fois C ++ 03 et C ++ 11, ce n'est donc pas aussi simple que de tirer auto_ptr. Il convient également de mentionner que la bibliothèque n'a pas de dépendances externes. Il utilise C ++ 03; et n'utilise pas Autotools, Cmake, Boost, ...
Comment gérer les modifications de conception pour s'éloigner de auto_ptrC ++ 11 tout en conservant la compatibilité avec C ++ 03?
Foo::Initializeen Foo::Foo.
auto_ptrzones de portée (c.-à-d.std::auto_ptr), Doivent- elles l'être ou le pointeur intelligent peut-il être obtenu à partir d'un autre espace de noms?