Розіменування “сирих” вказівників
Створення вказівників є безпечним, але для їх розіменування потрібно unsafe
:
Speaker Notes
This slide should take about 10 minutes.
Хорошою практикою є (і вимагається посібником зі стилю Android Rust) писати коментар до кожного unsafe
блоку, пояснюючи, наскільки код у ньому відповідає вимогам безпеки небезпечних операцій, які він виконує.
У випадку розіменувань покажчиків це означає, що покажчики мають бути дійсними, тобто:
- Покажчик має бути ненульовим.
- Покажчик має бути розіменоваючим (у межах одного виділеного об’єкта).
- Об’єкт не повинен бути звільнений.
- Не повинно бути одночасних доступів до того самого розташування.
- Якщо вказівник було отримано шляхом приведення посилання, базовий об’єкт має бути дійсним, і жодне посилання не може використовуватися для доступу до пам’яті.
У більшості випадків вказівник також має бути правильно вирівняний.
У розділі “НЕ БЕЗПЕЧНО” наведено приклад поширеної помилки UB: *r1
має 'static
час життя, тому r3
має тип &'static String
, і таким чином переживає s
. Створення посилання з покажчика вимагає великої обережності.