## SmartPtr class


Κλάση δείκτη για να τυλίγει τύπους που εκχωρούνται στο σωρό. Χρησιμοποιήστε την για τη διαχείριση μνήμης των κλάσεων που κληρονομούν το [Object](../object/). Αυτός ο τύπος δείκτη ακολουθεί τη σημασιολογία των ενδοσυνεχόμενων δεικτών. Ο μετρητής αναφοράς αποθηκεύεται είτε στο ίδιο το [Object](../object/) είτε στη δομή μετρητή που είναι στενά συνδεδεμένη με την παρουσία του [Object](../object/). Σε κάθε περίπτωση, όλα τα στιγμιότυπα του [SmartPtr](./) σχηματίζουν μια ομάδα μοναδικής ιδιοκτησίας ανεξάρτητα από το πώς δημιουργήθηκαν, κάτι που διαφέρει από τη συμπεριφορά της κλάσης std::shared_ptr. Η μετατροπή ακατέργαστου δείκτη σε [SmartPtr](./) είναι ασφαλής δεδομένου ότι υπάρχουν άλλα στιγμιότυπα του [SmartPtr](./) που κρατούν κοινές αναφορές στο ίδιο αντικείμενο. Ένα στιγμιότυπο κλάσης [SmartPtr](./) μπορεί να βρίσκεται σε μία από τις δύο καταστάσεις: κοινό δείκτη και αδύναμος δείκτης. Για να παραμείνει το αντικείμενο ζωντανό, πρέπει να υπάρχει θετικός αριθμός κοινών αναφορών σε αυτό. Και οι αδύναμοι και οι κοινόδεις δείκτες μπορούν να χρησιμοποιηθούν για πρόσβαση στο αντικείμενο (για κλήση μεθόδων, ανάγνωση ή εγγραφή πεδίων κ.λπ.), αλλά οι αδύναμοι δείκτες δεν συμμετέχουν στην καταμέτρηση αναφορών του κοινόδους δείκτη. Το [Object](../object/) διαγράφεται όταν ο τελευταίος 'shared' δείκτης [SmartPtr](./) προς αυτό καταστρέφεται. Επομένως, βεβαιωθείτε ότι αυτό δεν συμβαίνει όταν δεν υπάρχουν άλλοι κοινόδεις δείκτες [SmartPtr](./) προς το αντικείμενο, π.χ. κατά τη δημιουργία ή την καταστροφή του αντικειμένου. Χρησιμοποιήστε τα αντικείμενα φύλακα System::Object::ThisProtector (σε κώδικα C++) ή τα χαρακτηριστικά CppCTORSelfReference ή CppSelfReference (σε κώδικα C# που μεταφράζεται) για να διορθώσετε αυτό το ζήτημα. Παρόμοια, βεβαιωθείτε ότι σπάζετε τις κυκλικές αναφορές χρησιμοποιώντας την κλάση δείκτη [System::WeakPtr](../weakptr/) ή τη λειτουργία δείκτη [System::SmartPtrMode::Weak](../smartptrmode/) (σε κώδικα C++) ή το χαρακτηριστικό CppWeakPtr (σε κώδικα C# που μεταφράζεται). Εάν δύο ή περισσότερα αντικείμενα αναφέρονται το ένα στο άλλο χρησιμοποιώντας 'shared' δείκτες, δεν θα διαγραφούν ποτέ. Εάν ο τύπος δείκτη (αδύναμος ή κοινός) πρέπει να αλλάξει κατά την εκτέλεση, χρησιμοποιήστε τη μέθοδο [System::SmartPtr<T>::set_Mode()](./set_mode/) ή την κλάση [System::DynamicWeakPtr](../dynamicweakptr/). Η κλάση [SmartPtr](./) δεν περιέχει εικονικές μεθόδους. Θα πρέπει να την κληρονομήσετε μόνο εάν δημιουργείτε τη δική σας στρατηγική διαχείρισης μνήμης. Αυτός ο τύπος είναι ένας δείκτης για τη διαχείριση της διαγραφής άλλου αντικειμένου. Θα πρέπει να εκχωρείται στη στοίβα και να περνάει σε συναρτήσεις είτε με τιμή είτε με σταθερή αναφορά.

```cpp
template<class T>class SmartPtr
```


| Parameter | Περιγραφή |
| --- | --- |
| T | Τύπος του αντικειμένου που δείχνει. Πρέπει να είναι είτε το [System::Object](../object/) είτε υποκλάση του. |
## Μέθοδοι

| Μέθοδος | Περιγραφή |
| --- | --- |
| [begin](./begin/)() | Πρόσβαση στη μέθοδο [begin()](./begin/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [begin()](./begin/). |
| [begin](./begin/)() const | Πρόσβαση στη μέθοδο [begin()](./begin/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [begin()](./begin/). |
| [Cast](./cast/)() const | Μετατρέπει τον δείκτη στον ίδιο του τον τύπο. |
| [Cast](./cast/)() const | Μετατρέπει τον δείκτη σε βασικό τύπο χρησιμοποιώντας static_cast. |
| [Cast](./cast/)() const | Μετατρέπει τον δείκτη σε παράγωγο τύπο χρησιμοποιώντας dynamic_cast. |
| [Cast](./cast/)() const | Μετατρέπει τον δείκτη σε παράγωγο τύπο χρησιμοποιώντας dynamic_cast. |
| [cbegin](./cbegin/)() const | Πρόσβαση στη μέθοδο [cbegin()](./cbegin/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [cbegin()](./cbegin/). |
| [cend](./cend/)() const | Πρόσβαση στη μέθοδο [cend()](./cend/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [cend()](./cend/). |
| [const_pointer_cast](./const_pointer_cast/)() const | Μετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας const_cast στο αντικείμενο που δείχνει. |
| [dynamic_pointer_cast](./dynamic_pointer_cast/)() const | Μετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας dynamic_cast στο αντικείμενο που δείχνει. |
| [end](./end/)() | Πρόσβαση στη μέθοδο [end()](./end/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [end()](./end/). |
| [end](./end/)() const | Πρόσβαση στη μέθοδο [end()](./end/) μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το [SmartPtr_](./smartptr_/) είναι ειδικευμένος τύπος με μέθοδο [end()](./end/). |
| [get](./get/)() const | Επιστρέφει το αντικείμενο που δείχνει. |
| [get_Mode](./get_mode/)() const | Επιστρέφει τη λειτουργία του δείκτη. |
| [get_shared](./get_shared/)() const | Λαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης, αλλά επιβεβαιώνει ότι ο δείκτης είναι σε κοινή λειτουργία. |
| [get_shared_count](./get_shared_count/)() const | Λαμβάνει τον αριθμό των κοινών δεικτών που υπάρχουν προς το αναφερόμενο αντικείμενο, συμπεριλαμβανομένου του τρέχοντος. Επιβεβαιώνει ότι ο τρέχων δείκτης βρίσκεται σε κοινή λειτουργία. |
| [GetHashCode](./gethashcode/)() const | Καλεί [GetHashCode()](./gethashcode/) στο αντικείμενο στο οποίο δείχνει ο δείκτης. |
| [GetObjectNotNull](./getobjectnotnull/)() const | Λαμβάνει το τρέχον αναφερόμενο αντικείμενο (αν υπάρχει) ή ρίχνει εξαίρεση. |
| [GetObjectOrNull](./getobjectornull/)() const | Λαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης (αν υπάρχει) ή nullptr. Το ίδιο με το [get()](./get/). |
| [GetObjectOwner](./getobjectowner/)() const | Λαμβάνει το αναφερόμενο αντικείμενο. |
| [GetPointer](./getpointer/)() const | Λαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης (αν υπάρχει) ή nullptr. Το ίδιο με το [get()](./get/). |
| [Is](./is/)(const System::TypeInfo\&) const | Ελέγχει αν το αντικείμενο στο οποίο δείχνει ο δείκτης είναι συγκεκριμένου τύπου ή τύπου-παιδιού του. Ακολουθεί τη σημασιολογία του C# 'is'. |
| [IsAliasingPtr](./isaliasingptr/)() const | Ελέγχει αν ο δείκτης δείχνει σε άλλο αντικείμενο από το ιδιοκτησιακό (δημιουργήθηκε από κατασκευαστή aliasing). |
| [IsShared](./isshared/)() const | Ελέγχει αν ο δείκτης είναι σε κοινή λειτουργία. |
| [IsWeak](./isweak/)() const | Ελέγχει αν ο δείκτης είναι σε αδυναμία (weak) λειτουργία. |
| explicit [operator bool](./operatorbool/)() const | Ελέγχει αν ο δείκτης δεν είναι null. |
| [operator!](./operator!/)() const | Ελέγχει αν ο δείκτης είναι null. |
| [operator*](./operator_/)() const | Λαμβάνει αναφορά στο αντικείμενο στο οποίο δείχνει ο δείκτης. Επιβεβαιώνει ότι ο δείκτης δεν είναι null. |
| [operator->](./operator-_/)() const | Επιτρέπει την πρόσβαση στα μέλη του αναφερόμενου αντικειμένου. |
| [operator<](./operator_/)(Y *) const | Παρέχει σημασιολογία σύγκρισης με λιγότερο για την κλάση [SmartPtr](./). |
| [operator<](./operator_/)(SmartPtr\<Y\> const\&) const | Παρέχει σημασιολογία σύγκρισης με λιγότερο για την κλάση [SmartPtr](./). |
| [operator=](./operator=/)(SmartPtr_\&&) | Αναθέτει με μετακίνηση το αντικείμενο [SmartPtr](./). Το x γίνεται μη χρησιμοποιήσιμο. |
| [operator=](./operator=/)(const SmartPtr_\&) | Αναθέτει με αντιγραφή το αντικείμενο [SmartPtr](./). |
| [operator=](./operator=/)(const SmartPtr\<Q\>\&) | Αναθέτει με αντιγραφή το αντικείμενο [SmartPtr](./). Κάνει τις απαιτούμενες μετατροπές τύπου. |
| [operator=](./operator=/)(Pointee_ *) | Αναθέτει ακατέργαστο δείκτη στο αντικείμενο [SmartPtr](./). |
| [operator=](./operator=/)(std::nullptr_t) | Ορίζει την τιμή του δείκτη σε nullptr. |
| [operator==](./operator==/)(std::nullptr_t) const | Ελέγχει αν ο δείκτης δείχνει σε nullptr. |
| [operator[]](./operator[]/)(IdxType) const | Πρόσβαση στα στοιχεία του πίνακα. Συγκεντρώνεται μόνο αν το [SmartPtr_](./smartptr_/) είναι εξειδίκευση του [System::Array](../array/). |
| [RemoveAliasing](./removealiasing/)() const | Αφαιρεί το aliasing (δημιουργήθηκε από κατασκευαστή aliasing) από τον δείκτη, διασφαλίζοντας ότι διαχειρίζεται (αν είναι κοινό) ή παρακολουθεί (αν είναι αδύναμο) το ίδιο αντικείμενο στο οποίο δείχνει. |
| [reset](./reset/)(Pointee_ *) | Ορίζει το αντικείμενο στο οποίο δείχνει. |
| [reset](./reset/)() | Κάνει τον δείκτη να δείχνει σε nullptr. |
| [set_Mode](./set_mode/)(SmartPtrMode) | Ορίζει τη λειτουργία του δείκτη. Μπορεί να αλλάξει τους μετρητές αναφορών του αντικειμένου που αναφέρεται. |
| [SetContainedTemplateWeakPtr](./setcontainedtemplateweakptr/)(uint32_t) const | Καλεί τη μέθοδο SetTemplateWeakPtr() στο αντικείμενο που δείχνει (αν υπάρχει). |
| [SmartPtr](./smartptr/)(SmartPtrMode) | Δημιουργεί αντικείμενο [SmartPtr](./) της απαιτούμενης λειτουργίας. |
| [SmartPtr](./smartptr/)(std::nullptr_t, SmartPtrMode) | Δημιουργεί αντικείμενο [SmartPtr](./) μηδενικού δείκτη της απαιτούμενης λειτουργίας. |
| [SmartPtr](./smartptr/)(Pointee_ *, SmartPtrMode) | Δημιουργεί [SmartPtr](./) που δείχνει στο καθορισμένο αντικείμενο, ή μετατρέπει ακατέργαστο δείκτη σε [SmartPtr](./). |
| [SmartPtr](./smartptr/)(const SmartPtr_\&, SmartPtrMode) | Δημιουργεί αντίγραφο αντικειμένου [SmartPtr](./). Και οι δύο δείκτες δείχνουν στο ίδιο αντικείμενο μετά. |
| [SmartPtr](./smartptr/)(const SmartPtr\<Q\>\&, SmartPtrMode) | Δημιουργεί αντίγραφο αντικειμένου [SmartPtr](./). Και οι δύο δείκτες δείχνουν στο ίδιο αντικείμενο μετά. Εκτελεί μετατροπή τύπου αν επιτρέπεται. |
| [SmartPtr](./smartptr/)(SmartPtr_\&&, SmartPtrMode) | Δημιουργεί αντικείμενο [SmartPtr](./) με μετακίνηση. Στην ουσία, ανταλλάσσει δύο δείκτες, εάν είναι και οι δύο στην ίδια λειτουργία. Το x μπορεί να είναι μη χρησιμοποιήσιμο μετά την κλήση. |
| explicit [SmartPtr](./smartptr/)(const SmartPtr\<Array\<Y\>\>\&, SmartPtrMode) | Μετατρέπει τον τύπο του αναφερόμενου πίνακα δημιουργώντας έναν νέο πίνακα διαφορετικού τύπου. Χρήσιμο εάν σε C# υπάρχει μετατροπή τύπου πίνακα που δεν υποστηρίζεται σε C++. |
| explicit [SmartPtr](./smartptr/)(const Y\&) | Αρχικοποιεί κενό πίνακα. Χρησιμοποιείται για τη μετάφραση ορισμένων κατασκευών κώδικα C#. |
| [SmartPtr](./smartptr/)(const SmartPtr\<P\>\&, Pointee_ *, SmartPtrMode) | Δημιουργεί ένα [SmartPtr](./) που μοιράζεται πληροφορίες ιδιοκτησίας με την αρχική τιμή του ptr, αλλά κρατά έναν άσχετο και μη διαχειριζόμενο δείκτη p. |
| [static_pointer_cast](./static_pointer_cast/)() const | Μετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας static_cast στο αντικείμενο που δείχνει. |
| [ToObjectPtr](./toobjectptr/)() const | Μετατρέπει οποιονδήποτε τύπο δείκτη σε δείκτη προς [Object](../object/). Δεν απαιτεί ο τύπος [Pointee_](./pointee_/) να είναι πλήρης. |
| static [Type](./type/)() | Συντόμευση για λήψη αντικειμένου [System::TypeInfo](../typeinfo/) για τον τύπο [Pointee_](./pointee_/) . |
| [~SmartPtr](./~smartptr/)() | Καταστρέφει το αντικείμενο [SmartPtr](./). Εάν απαιτείται, μειώνει τον μετρητή αναφορών του αντικειμένου που δείχνει και διαγράφει το αντικείμενο. |
## Typedefs

| Typedef | Περιγραφή |
| --- | --- |
| [ArrayType](./arraytype/) | Ίδιο με το [Pointee_](./pointee_/), εάν είναι εξειδίκευση του [System::Array](../array/), και void διαφορετικά. |
| [Pointee_](./pointee_/) | Τύπος που δείχνει. |
| [SmartPtr_](./smartptr_/) | Εξειδικευμένος τύπος έξυπνου δείκτη. |
| [ValueType](./valuetype/) | Τύπος αποθήκευσης του δείκτη πίνακα. Έχει νόημα μόνο εάν το T είναι εξειδίκευση του [System::Array](../array/). |

## Δείτε επίσης

* Namespace [System](../)
* Library [Aspose.Page for C++](../../)
