Bibliothèque de mémoire C ++ - owner_less

La description

Il définit les objets fonction qui effectuent une comparaison basée sur le propriétaire entre les objets shared_ptr et / ou low_ptr.

Déclaration

Voici la déclaration pour std :: owner_less.

template <class Ptr> struct owner_less;
template <class T> struct owner_less<shared_ptr<T>>;
template <class T> struct owner_less<weak_ptr<T>>;

C ++ 11

template <class Ptr> struct owner_less;
template <class T> struct owner_less<shared_ptr<T>>;
template <class T> struct owner_less<weak_ptr<T>>;

Paramètres

Ptr - C'est un pointeur géré.

Valeur de retour

aucun

Des exceptions

noexcep - Il ne jette aucune exception.

Exemple

Dans l'exemple ci-dessous, explique std :: owner_less.

#include <iostream>
#include <memory>
#include <set>

int main () {
   int * p = new int (10);

   std::shared_ptr<int> a (new int (20));
   std::shared_ptr<int> b (a,p);
  
   std::set < std::shared_ptr<int> > value_based;
   std::set < std::shared_ptr<int>, std::owner_less<std::shared_ptr<int>> > owner_based;

   value_based.insert (a);
   value_based.insert (b);

   owner_based.insert (a);
   owner_based.insert (b);

   std::cout << "value_based.size() is " << value_based.size() << '\n';
   std::cout << "owner_based.size() is " << owner_based.size() << '\n';

   delete p;
   return 0;
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant -

value_based.size() is 2
owner_based.size() is 1