Зміст курсу
Розумні Вказівники C++
Розумні Вказівники C++
Переміщення Унікальних Вказівників
Копіювання не дозволено
std::unique_ptr
— це розумний вказівник, який керує динамічно виділеним об'єктом і забезпечує його правильне видалення, коли він виходить за межі області видимості. Він має виключне володіння об'єктом, яким керує, що означає, що жодні два std::unique_ptr
не можуть одночасно володіти одним і тим самим об'єктом.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }
Переміщення унікального вказівника
Хоча копіювання не дозволено, ви можете передати право власності на об'єкт, використовуючи std::move
. Це переміщує ресурс з одного std::unique_ptr
до іншого, залишаючи початковий вказівник порожнім.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }
Коли ви використовуєте std::move
, право власності на об'єкт передається від одного унікального вказівника до іншого. Після цього початковий вказівник більше не володіє об'єктом, і новий вказівник стає його власником.
Swipe to start coding
Завершіть наступний код так, щоб право власності на динамічно виділений цілий (зі значенням 42) було безпечно передано від ptr1
до ptr2
.
Рішення
solution
Дякуємо за ваш відгук!
Переміщення Унікальних Вказівників
Копіювання не дозволено
std::unique_ptr
— це розумний вказівник, який керує динамічно виділеним об'єктом і забезпечує його правильне видалення, коли він виходить за межі області видимості. Він має виключне володіння об'єктом, яким керує, що означає, що жодні два std::unique_ptr
не можуть одночасно володіти одним і тим самим об'єктом.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }
Переміщення унікального вказівника
Хоча копіювання не дозволено, ви можете передати право власності на об'єкт, використовуючи std::move
. Це переміщує ресурс з одного std::unique_ptr
до іншого, залишаючи початковий вказівник порожнім.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }
Коли ви використовуєте std::move
, право власності на об'єкт передається від одного унікального вказівника до іншого. Після цього початковий вказівник більше не володіє об'єктом, і новий вказівник стає його власником.
Swipe to start coding
Завершіть наступний код так, щоб право власності на динамічно виділений цілий (зі значенням 42) було безпечно передано від ptr1
до ptr2
.
Рішення
solution
Дякуємо за ваш відгук!