Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Переміщення Унікальних Вказівників | Унікальні Вказівники
Розумні Вказівники C++
course content

Зміст курсу

Розумні Вказівники C++

Розумні Вказівники C++

1. Вступ до Розумних Вказівників
2. Унікальні Вказівники
3. Спільні Вказівники
4. Слабкі Вказівники
5. Просунуті Теми

book
Переміщення Унікальних Вказівників

Копіювання не дозволено

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

cpp

main

copy
123456789
#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 до іншого, залишаючи початковий вказівник порожнім.

cpp

main

copy
123456789101112131415
#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.

Рішення

cpp

solution

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2
toggle bottom row

book
Переміщення Унікальних Вказівників

Копіювання не дозволено

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

cpp

main

copy
123456789
#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 до іншого, залишаючи початковий вказівник порожнім.

cpp

main

copy
123456789101112131415
#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.

Рішення

cpp

solution

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2
Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt