Proprietario C ++ Meno

Proprietario C ++ Meno
In questo articolo, discuteremo di un oggetto funzione in lingua C ++, il proprietario :: proprietario_less. Il suo modulo completo è basato sul proprietario inferiore all'operazione. Per spiegarlo in dettaglio, devi capire prima quali sono gli oggetti della funzione. Gli oggetti della funzione sono anche noti come funzioni in c++. I funttori sono come elementi costitutivi per comporre programmi più grandi. La cosa principale che facciamo nei funttori è che stiamo costruendo oggetti fuori dalle funzioni. Quindi, quello che facciamo in questo caso è utilizzare un oggetto come una funzione.

Un funtore è una funzione con uno stato e la chiave per tenere questo stato è l'operatore (). Un functor è una funzione che si ottiene sovraccaricando l'operatore di parole chiave () in alcune classi. Quindi, i funttori sono oggetti che agiscono come funzioni. La stessa vecchia funzione di sintassi viene utilizzata per invocare funzioni. Un funtore viene costruito creando un oggetto che sovraccarica l'operatore. Ora, discutiamo di Functor di proprietario. Questo funtor o oggetto funzione, anziché ordini di tipo basato sul valore, ci fornisce un ordinamento a tipo misto basato sul proprietario sia di STD :: deboli_ptr e std :: shared_ptr.

È stato ordinato in modo tale che questi due puntatori intelligenti corrispondano equivalentemente solo quando entrambi condividono la proprietà. O se entrambi sono vuoti anche quando i valori ottenuti dai metodi getter dei puntatori grezzi non sono gli stessi. Questi eseguono confronti basati sui proprietari tra puntatori deboli e puntatori condivisi. "Proprietario_less" viene utilizzato per ordinare l'indirizzo del blocco di controllo. Quindi, considera due puntatori deboli o puntatori condivisi equivalenti se condividono la stessa proprietà.

Sintassi:

La sintassi per il proprietario meno operatore è:

modello struct proprietario_less;
Proprietario_less>

La libreria standard di C ++ ci dà una specializzazione di std :: proprietario_less quando "t" non è inizializzato. In caso di ciò, i parametri vengono detratti dall'elenco dei parametri.

Si noti che questo è un modello per il proprietario_less. Non ha una sintassi specifica in quanto è un approccio per risolvere un problema utilizzando puntatori e funzioni intelligenti.

I membri del proprietario_less

Bool Operator () (const std :: shared_ptr& lhs,
const std :: shared_ptr& rhs) const noexcept

Esempio # 01:

Per fare ciò non abbiamo scritto alcun codice complesso che utilizza struttura, classe, funzione o oggetti di programmazione come questi. Invece, abbiamo provato a scrivere un codice che può essere il più semplice possibile direttamente nel nostro metodo principale. Abbiamo inizializzato un puntatore di un numero intero del tipo di dati con una lunghezza di 10.

Successivamente, abbiamo dichiarato un puntatore condiviso "X" con una lunghezza di 20. Abbiamo dichiarato un altro puntatore condiviso Y con la lunghezza come puntatore condiviso "X". Nella riga successiva, abbiamo impostato il puntatore su Basato sul valore. Nella riga numero 12, abbiamo impostato i nostri puntatori a puntatori senza proprietario. Ora eseguiremo inserimenti basati sul valore per i nostri puntatori xey.

Dopodiché, faremo lo stesso, ma il proprietario basato per i nostri puntatori X e Y usando il nostro functor std :: proprietario_less. Si prega di notare che abbiamo scritto lo stesso codice sia per i puntatori basati sul valore che per il proprietario. L'unica differenza è che stiamo usando la parola chiave STD :: proprietario_less per i puntatori basati sul proprietario.

Ora, per mostrarti la differenza di valore e la differenza di dimensioni tra i due approcci, abbiamo stampato le dimensioni dei puntatori basati su valori e basati sul proprietario. Successivamente, nella riga numero 20, abbiamo eliminato il puntatore che abbiamo creato inizialmente all'inizio della nostra funzione principale. Nell'ultima riga, abbiamo restituito 0 perché il tipo di ritorno del nostro metodo principale è un numero intero. Quindi, siamo tornati 0. Ora eseguiremo il nostro codice e controlleremo il nostro risultato.

#includere
#includere
#includere
int main ()

int * puntatore = new int (10);
std :: shared_ptr x (nuovo int (20));
std :: shared_ptr y (x, puntatore);
std :: set < std::shared_ptr > value_based;
std :: set < std::shared_ptr, std :: proprietario_less>> proprietario_based;
value_aded.inserire (x);
value_aded.inserire (y);
Proprietario. Basato.inserire (x);
Proprietario. Basato.inserire (y);
std :: cout << "value_based.size() is " << value_based.size() << '\n';
std :: cout << "owner_based.size() is " << owner_based.size() << '\n';
Elimina puntatore;
restituzione 0;

L'output che otteniamo dal codice eseguito sopra è il seguente. Se diamo un'occhiata all'output, possiamo vedere che la dimensione del puntatore basato sul valore è 2 e la dimensione del puntatore basato sul proprietario è 1. La domanda sorge qui è che se abbiamo eseguito gli stessi passaggi per entrambi, come mai le loro dimensioni sono diverse? La risposta è che, come abbiamo discusso in precedenza nella nostra introduzione, questo functor fornisce ordinazione di tipo basato sul proprietario e i due puntatori si confrontano in modo equivalente se condividono la stessa proprietà. Ma se i valori sono diversi per entrambi i puntatori, allora perché condividono la stessa proprietà?

Quindi, questo è il vantaggio principale dell'oggetto funzione senza proprietario anche se i valori sono diversi e non uguali ancora, condividono la stessa proprietà. Ecco perché la dimensione del valore basato è due perché ha due puntatori ed entrambi hanno una proprietà diversa. Ma in base al proprietario, stiamo utilizzando funzioni senza proprietario che è dovuta alla condivisione della stessa proprietà, la dimensione è una. Nel nostro caso, poiché i due puntatori condivisi condividono la stessa proprietà, vale a dire il motivo per cui sono considerati equivalenti e la dimensione della base del proprietario diventa 1.

Conclusione

In questa guida, abbiamo discusso di un tipo di funzione di funzione in C ++ che è std :: proprietario_less. Abbiamo spiegato sugli oggetti della funzione, come vengono utilizzati questi oggetti e come questi sono dichiarati e chiamati. Successivamente, abbiamo discusso degli oggetti di funzione Std :: Proprietario_less e spiegato le loro applicazioni e definizioni in termini di programmazione. Più tardi, abbiamo spiegato la loro sintassi e abbiamo dato un'occhiata ai loro membri. Abbiamo anche eseguito un esempio pratico sull'argomento per farti capire il concetto in modo molto più dettagliato. Per concludere questo argomento, possiamo dire che std :: proprietario_less definisce funzioni o oggetti di funzione che eseguono confronti basati sul proprietario tra puntatori deboli e puntatori condivisi.