Передайте shared_ptr за посиланням або константним посиланням. У цьому випадку кількість посилань не збільшується, і абонент може отримати доступ до вказівника, доки абонент не виходить за межі області видимості.20 березня 2024 р.
std::shared_ptr складається з блоку керування та його ресурсу. Блок керування є потокобезпечним, але доступ до ресурсу – ні. Це означає зміна лічильника посилань є атомарною операцією і ви маєте гарантію, що ресурс буде видалено рівно один раз. Це гарантії, які вам надає std::shared_ptr.
std::unique_ptr<T> Унікальний покажчик не поділяє право власності та звільняє ресурс у кінці області. std::shared_ptr<T> Спільний вказівник має спільну власність і звільняє ресурс лише тоді, коли немає інших підрахованих власників і він досяг кінця області.
Об’єкт shared_ptr фактично містить вказівник на ресурс, яким він володіє, або містить нульовий вказівник. Ресурс може належати більш ніж одному об’єкту shared_ptr; коли останній об’єкт shared_ptr, який володіє певним ресурсом, знищується, ресурс звільняється.
Покажчик, за допомогою якого не можна змінити значення змінної, на яку він вказує, називається вказівником на константу. Постійний вказівник на константу — це вказівник, який не може змінити адресу, на яку він вказує, і не може змінити значення, що зберігається за цією адресою.
У C++ std::shared_ptr є потужним інструментом, який можна використовувати для керування спільним правом власності на ресурси. Однак важливо це пам'ятати std::shared_ptr сам по собі не є потоково безпечним. Щоб забезпечити безпеку потоку, вам потрібно використовувати його разом із примітивом синхронізації, таким як м’ютекс.