kzhereb / knu-is-ooop2019

Materials for "Fundamentals of OOP" course
MIT License
3 stars 0 forks source link

T10.31. В чому різниця між smart pointer та raw pointer? #31

Open yanaskyrda opened 4 years ago

JuliaSamartseva commented 4 years ago

У smart pointers відбувається автоматичне керування пам'яттю

aoyako commented 4 years ago

В c++, у ролі типу smart pointers виступають класи, а у ролі raw pointer - вказівники.

Velly69 commented 4 years ago

Raw pointers - це звичайні вказівники:

void UseRawPointer()
{
    Song* pSong = new Song(L"Nothing on You", L"Bruno Mars"); 
    // something...
    // Don't forget to delete!
    delete pSong;   
}

Smart pointers автоматично видаляються при виході зі scope:

void UseSmartPointer()
{
    unique_ptr<Song> song2(new Song(L"Nothing on You", L"Bruno Mars"));
    // something...
    wstring s = song2->duration_;
} // song2 is deleted automatically here.
AntonHladkiy commented 4 years ago

Raw pinters звичайні вказівники створені за допомогою new, потрібно звільнити пам'ять за допомогою delete після використання. Smart pointers роблять це автоматично при виході з області видимості

RostyslavMV commented 4 years ago

Smart pointers автоматично видаляються, коли перестають бути видимими, а raw pointers - звичайні вказівники, пам'ять яку вони використовують потрібно очищати вручну.

i1red commented 4 years ago

У smart pointer'ах звільнення пам'яті відбувається автоматично

ilyakorenevskyi commented 4 years ago

Raw pointer - стандарний покажччик у с++ Smart Pointer - класс, що здійснює автоматичне керування пам'ятю