Utilisation de std :: shared_ptr

Comment utiliser std :: shared_ptr pour le tableau de double? En outre, quels sont les avantages / inconvénients de l’utilisation de shared_ptr.

Cela dépend de ce que vous recherchez. Si vous voulez juste un tableau redimensionnable de doubles, optez pour

 std::vector 

Exemple:

 std::vector v; v.push_back(23.0); std::cout << v[0]; 

Si le partage de la propriété dudit réseau vous importe, utilisez par exemple

 std::shared_ptr> 

Exemple:

 std::shared_ptr> v1(new std::vector); v1->push_back(23.0); std::shared_ptr> v2 = v1; v2->push_back(9.0); std::cout << (*v1)[1]; 

Alternativement, Boost a

 boost::shared_array 

qui sert un but similaire. Vois ici:

http://www.boost.org/libs/smart_ptr/shared_array.htm

En ce qui concerne quelques avantages / inconvénients de shared_ptr, allez:

Avantages

  • Désallocation automatisée de ressources partagées basée sur le comptage de références - aide à éviter les memory leaks et autres problèmes associés aux objects non désalloués alors qu'ils devraient l'être
  • Peut rendre plus facile l'écriture de code sans exception

Les inconvénients

  • Le temps système nécessaire pour stocker le nombre de références peut être considérable pour les petits objects
  • Les performances peuvent être pires que pour les pointeurs bruts (mais mesurez cela)

Vous pouvez également fournir un deleter de tableau:

 template class ArrayDeleter { public: void operator () (T* d) const { delete [] d; } }; int main () { std::shared_ptr array (new double [256], ArrayDeleter ()); }