Κλάση System::SmartPtr

SmartPtr class

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

template<class T>class SmartPtr
ParameterΠεριγραφή
TΤύπος του αντικειμένου που δείχνει. Πρέπει να είναι είτε το System::Object είτε υποκλάση του.

Μέθοδοι

ΜέθοδοςΠεριγραφή
begin()Πρόσβαση στη μέθοδο begin() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο begin().
begin() constΠρόσβαση στη μέθοδο begin() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο begin().
Cast() constΜετατρέπει τον δείκτη στον ίδιο του τον τύπο.
Cast() constΜετατρέπει τον δείκτη σε βασικό τύπο χρησιμοποιώντας static_cast.
Cast() constΜετατρέπει τον δείκτη σε παράγωγο τύπο χρησιμοποιώντας dynamic_cast.
Cast() constΜετατρέπει τον δείκτη σε παράγωγο τύπο χρησιμοποιώντας dynamic_cast.
cbegin() constΠρόσβαση στη μέθοδο cbegin() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο cbegin().
cend() constΠρόσβαση στη μέθοδο cend() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο cend().
const_pointer_cast() constΜετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας const_cast στο αντικείμενο που δείχνει.
dynamic_pointer_cast() constΜετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας dynamic_cast στο αντικείμενο που δείχνει.
end()Πρόσβαση στη μέθοδο end() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο end().
end() constΠρόσβαση στη μέθοδο end() μιας υποκείμενης συλλογής. Συγκομπιλίζεται μόνο εάν το SmartPtr_ είναι ειδικευμένος τύπος με μέθοδο end().
get() constΕπιστρέφει το αντικείμενο που δείχνει.
get_Mode() constΕπιστρέφει τη λειτουργία του δείκτη.
get_shared() constΛαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης, αλλά επιβεβαιώνει ότι ο δείκτης είναι σε κοινή λειτουργία.
get_shared_count() constΛαμβάνει τον αριθμό των κοινών δεικτών που υπάρχουν προς το αναφερόμενο αντικείμενο, συμπεριλαμβανομένου του τρέχοντος. Επιβεβαιώνει ότι ο τρέχων δείκτης βρίσκεται σε κοινή λειτουργία.
GetHashCode() constΚαλεί GetHashCode() στο αντικείμενο στο οποίο δείχνει ο δείκτης.
GetObjectNotNull() constΛαμβάνει το τρέχον αναφερόμενο αντικείμενο (αν υπάρχει) ή ρίχνει εξαίρεση.
GetObjectOrNull() constΛαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης (αν υπάρχει) ή nullptr. Το ίδιο με το get().
GetObjectOwner() constΛαμβάνει το αναφερόμενο αντικείμενο.
GetPointer() constΛαμβάνει το αντικείμενο στο οποίο δείχνει ο δείκτης (αν υπάρχει) ή nullptr. Το ίδιο με το get().
Is(const System::TypeInfo&) constΕλέγχει αν το αντικείμενο στο οποίο δείχνει ο δείκτης είναι συγκεκριμένου τύπου ή τύπου-παιδιού του. Ακολουθεί τη σημασιολογία του C# ‘is’.
IsAliasingPtr() constΕλέγχει αν ο δείκτης δείχνει σε άλλο αντικείμενο από το ιδιοκτησιακό (δημιουργήθηκε από κατασκευαστή aliasing).
IsShared() constΕλέγχει αν ο δείκτης είναι σε κοινή λειτουργία.
IsWeak() constΕλέγχει αν ο δείκτης είναι σε αδυναμία (weak) λειτουργία.
explicit operator bool() constΕλέγχει αν ο δείκτης δεν είναι null.
operator!() constΕλέγχει αν ο δείκτης είναι null.
operator*() constΛαμβάνει αναφορά στο αντικείμενο στο οποίο δείχνει ο δείκτης. Επιβεβαιώνει ότι ο δείκτης δεν είναι null.
operator->() constΕπιτρέπει την πρόσβαση στα μέλη του αναφερόμενου αντικειμένου.
operator<(Y *) constΠαρέχει σημασιολογία σύγκρισης με λιγότερο για την κλάση SmartPtr.
operator<(SmartPtr<Y> const&) constΠαρέχει σημασιολογία σύγκρισης με λιγότερο για την κλάση SmartPtr.
operator=(SmartPtr_&&)Αναθέτει με μετακίνηση το αντικείμενο SmartPtr. Το x γίνεται μη χρησιμοποιήσιμο.
operator=(const SmartPtr_&)Αναθέτει με αντιγραφή το αντικείμενο SmartPtr.
operator=(const SmartPtr<Q>&)Αναθέτει με αντιγραφή το αντικείμενο SmartPtr. Κάνει τις απαιτούμενες μετατροπές τύπου.
operator=(Pointee_ *)Αναθέτει ακατέργαστο δείκτη στο αντικείμενο SmartPtr.
operator=(std::nullptr_t)Ορίζει την τιμή του δείκτη σε nullptr.
operator==(std::nullptr_t) constΕλέγχει αν ο δείκτης δείχνει σε nullptr.
operator[](IdxType) constΠρόσβαση στα στοιχεία του πίνακα. Συγκεντρώνεται μόνο αν το SmartPtr_ είναι εξειδίκευση του System::Array.
RemoveAliasing() constΑφαιρεί το aliasing (δημιουργήθηκε από κατασκευαστή aliasing) από τον δείκτη, διασφαλίζοντας ότι διαχειρίζεται (αν είναι κοινό) ή παρακολουθεί (αν είναι αδύναμο) το ίδιο αντικείμενο στο οποίο δείχνει.
reset(Pointee_ *)Ορίζει το αντικείμενο στο οποίο δείχνει.
reset()Κάνει τον δείκτη να δείχνει σε nullptr.
set_Mode(SmartPtrMode)Ορίζει τη λειτουργία του δείκτη. Μπορεί να αλλάξει τους μετρητές αναφορών του αντικειμένου που αναφέρεται.
SetContainedTemplateWeakPtr(uint32_t) constΚαλεί τη μέθοδο SetTemplateWeakPtr() στο αντικείμενο που δείχνει (αν υπάρχει).
SmartPtr(SmartPtrMode)Δημιουργεί αντικείμενο SmartPtr της απαιτούμενης λειτουργίας.
SmartPtr(std::nullptr_t, SmartPtrMode)Δημιουργεί αντικείμενο SmartPtr μηδενικού δείκτη της απαιτούμενης λειτουργίας.
SmartPtr(Pointee_ *, SmartPtrMode)Δημιουργεί SmartPtr που δείχνει στο καθορισμένο αντικείμενο, ή μετατρέπει ακατέργαστο δείκτη σε SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Δημιουργεί αντίγραφο αντικειμένου SmartPtr. Και οι δύο δείκτες δείχνουν στο ίδιο αντικείμενο μετά.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Δημιουργεί αντίγραφο αντικειμένου SmartPtr. Και οι δύο δείκτες δείχνουν στο ίδιο αντικείμενο μετά. Εκτελεί μετατροπή τύπου αν επιτρέπεται.
SmartPtr(SmartPtr_&&, SmartPtrMode)Δημιουργεί αντικείμενο SmartPtr με μετακίνηση. Στην ουσία, ανταλλάσσει δύο δείκτες, εάν είναι και οι δύο στην ίδια λειτουργία. Το x μπορεί να είναι μη χρησιμοποιήσιμο μετά την κλήση.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Μετατρέπει τον τύπο του αναφερόμενου πίνακα δημιουργώντας έναν νέο πίνακα διαφορετικού τύπου. Χρήσιμο εάν σε C# υπάρχει μετατροπή τύπου πίνακα που δεν υποστηρίζεται σε C++.
explicit SmartPtr(const Y&)Αρχικοποιεί κενό πίνακα. Χρησιμοποιείται για τη μετάφραση ορισμένων κατασκευών κώδικα C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Δημιουργεί ένα SmartPtr που μοιράζεται πληροφορίες ιδιοκτησίας με την αρχική τιμή του ptr, αλλά κρατά έναν άσχετο και μη διαχειριζόμενο δείκτη p.
static_pointer_cast() constΜετατρέπει τον δείκτη σε διαφορετικό τύπο χρησιμοποιώντας static_cast στο αντικείμενο που δείχνει.
ToObjectPtr() constΜετατρέπει οποιονδήποτε τύπο δείκτη σε δείκτη προς Object. Δεν απαιτεί ο τύπος Pointee_ να είναι πλήρης.
static Type()Συντόμευση για λήψη αντικειμένου System::TypeInfo για τον τύπο Pointee_ .
~SmartPtr()Καταστρέφει το αντικείμενο SmartPtr. Εάν απαιτείται, μειώνει τον μετρητή αναφορών του αντικειμένου που δείχνει και διαγράφει το αντικείμενο.

Typedefs

TypedefΠεριγραφή
ArrayTypeΊδιο με το Pointee_, εάν είναι εξειδίκευση του System::Array, και void διαφορετικά.
Pointee_Τύπος που δείχνει.
SmartPtr_Εξειδικευμένος τύπος έξυπνου δείκτη.
ValueTypeΤύπος αποθήκευσης του δείκτη πίνακα. Έχει νόημα μόνο εάν το T είναι εξειδίκευση του System::Array.

Δείτε επίσης