Sobes.tech
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.