kzhereb / knu-is-ooop2019

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

T10.32. В чому різниця між unique_ptr та shared_ptr? #32

Open yanaskyrda opened 4 years ago

JuliaSamartseva commented 4 years ago

Unique_ptr не може бути скопійований, тобто не може бути двох unique pointers, які вказують на один об'єкт. Для shared_ptr - це можливо.

solovdaria commented 4 years ago

На відміну від unique_ptr та інших розумних вказівників, shared_ptr реалізує підрахунок посилань на ресурс.

Velly69 commented 4 years ago

Шаблоний клас unique_ptr представляє із себе унікальний вказівник на об'єкт. Вказівник не можна скопіювати, але можна передавати володіння їм за допомогою std::move. Клас shared_ptr є вказівником на об'єкт, яким володіє одразу декілька об'єктів. Вказівник можна і переміщувати, і копіювати. Число існуючих вказівників відстежується за допомогою лічильника посилань. Коли лічильник обнуляється, викликається деструктор об'єкту.

AntonHladkiy commented 4 years ago

Unique_ptr не можна скопіювати тобто може одночасно бути тільки 1 такий вказівник на певний об'єкт. Shared_ptr можна копіювати і також вказівник веде підрахунок кількості вказівників,які вказують на об'єкт, видалення відбувається коли лічильник обнуляється

RostyslavMV commented 4 years ago

Unique_ptr - унікальний вказівний, він вказує на один певний об'єкт і такий вказівник може бути лише один для цього об'єкта. Shared_ptr - вказівник, який використовується коли нам в кількох місцях одночасно потрібен доступ до об'єктав. Він веде підрахунок кількості посилань, видаляється коли лічильник обнуляється.

i1red commented 4 years ago

Для одного об'єкта може існувати лише один unique_ptr, тоді як одразу декілька shared_ptr можуть вказувати на один об'єкт(вони підраховують кількість посилань на цей об'єкт і знищують його, коли вона дорівнює 0)

ilyakorenevskyi commented 4 years ago

Unique_ptr - унікальний покажчик на об'єкт, що не може повторюватися В свою чергу shared_ptr це допускає