Junior — Middle
C++-ში სტანდარტული არათავსებული მაჩვენებელი და ჭკვიანი მაჩვენებელი std::unique_ptr შორის რა განსხვავებებია?
sobes.tech AI
პასუხი AI-სგან
C++-ში სტანდარტული უქმნელი მაჩვენებლის (raw pointer) და ჭკვიანი მაჩვენებლის std::unique_ptr ძირითადი განსხვავებები:
-
ობიექტის სიცოცხლის ხანგრძლივობის მართვა:
- Raw pointer უბრალოდ ინახავს მისამართს, მაგრამ არ მართავს ობიექტის სიცოცხლის ხანგრძლივობას. საჭიროა ხელით გამოიძახოთ delete.
- std::unique_ptr ავტომატურად წაშლის ობიექტს, როდესაც ის გამოდის სკოპიდან, რაც თავიდან აცილებს მეხსიერების გაჟონვას.
-
მფლობელობა:
- Raw pointer ობიექტს არ ფლობს, შეუძლია თავისუფლად იყოს კოპირებული და გადაცემა.
- std::unique_ptr ფლობს ობიექტს ექსკლუზიურად, კოპირება აკრძალულია, მხოლოდ გადატანა შესაძლებელია.
-
უსაფრთხოება:
- Raw pointer შეიძლება გამოიწვიოს შეცდომები, თუ დაგავიწყდათ ობიექტის წაშლა ან გამოიყენეთ მას შემდეგ, რაც წაიშალა.
- std::unique_ptr ეხმარება ამ შეცდომების თავიდან აცილებაში ავტომატური მართვის მეშვეობით.
მაგალითი std::unique_ptr-ის გამოყენების:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr ავტომატურად წაშლის ობიექტს, როდესაც ის გამოდის სკოპიდან
ამ გზით, std::unique_ptr ადვილად მართავს დინამიკურ მეხსიერებას და ზრდის კოდის უსაფრთხოებას.