Junior — Middle
C++-da standart olmayan göstərici ilə ağıllı göstərici std::unique_ptr arasında hansı fərqlər var?
sobes.tech Süni İntellekt
AI-dan cavab
C++-də standart qeyri-əhatəli göstərici (raw pointer) və ağıllı göstərici std::unique_ptr arasındakı əsas fərqlər:
-
Obyektin həyat müddətinin idarə olunması:
- Raw pointer sadəcə ünvanı saxlayır, amma obyektin həyat müddətini idarə etmir. Manual olaraq delete çağırmaq lazımdır.
- std::unique_ptr, scope-dan çıxanda avtomatik olaraq obyekti silir, yaddaş sızıntılarının qarşısını alır.
-
Mülkiyyət:
- Raw pointer obyektə sahib deyil, sərbəst şəkildə kopyalanıb ötürülə bilər.
- std::unique_ptr, obyekti yalnız ona məxsus edir, kopyalama qadağandır, yalnız köçürmə mümkündür.
-
Təhlükəsizlik:
- Raw pointer unutmaq və ya silindikdən sonra istifadə etmək kimi səhvlərə səbəb ola bilər.
- std::unique_ptr, avtomatik idarə etmə sayəsində bu cür səhvlərin qarşısını alır.
std::unique_ptr istifadə nümunəsi:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr, scope-dan çıxanda obyekti avtomatik siləcək
Beləliklə, std::unique_ptr dinamik yaddaş idarəsini asanlaşdırır və kodun təhlükəsizliyini artırır.