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
Передача Унікальних Вказівників

Однією з основних причин, чому ми обираємо вказівники та динамічне виділення пам'яті замість статичних змінних, є гнучкість, яку вони пропонують при передачі даних через різні секції коду. Однак, коли мова йде про унікальні вказівники, передача стає трохи складнішою.

Повернення з функцій-будівельників

Одним з дійсних випадків використання для передачі унікального вказівника є коли ви повертаєтеся з функції-будівельника (функції, яка існує лише для виділення/створення ресурсів).

cpp

unique_pointer_builder

copy
123456789101112131415
#include <iostream> #include <memory> std::unique_ptr<int> unique_ptr_builder() { return std::make_unique<int>(42); } int main() { // This will be the sole owner of the dynamically allocated integer 42 std::unique_ptr<int> p_unique = unique_ptr_builder(); if (p_unique) std::cout << "Value from unique pointer: " << *p_unique << std::endl; else std::cout << "Unique pointer is null." << std::endl; }

Використання функції-білдера для створення унікального вказівника на значення int. Після повернення функції, unique_ptr у функції main починає вказувати на динамічне значення цілого числа.

При передачі права власності

Також вважається правильним і безпечним move унікального вказівника. Наприклад, ви можете передати право власності на унікальний вказівник з class A до class B.

h

transferring_ownership

copy
12345
// Create a unique pointer inside classA classA->source_ptr = std::make_unique<int>(42); // Later, move the ownership to classB, this is perfectly fine classB->target_ptr = std::move(sourcePtr);

Коли не слід передавати унікальні вказівники

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

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

h

passing_raw_pointer

copy
12345
// Create a unique pointer. std::unique_ptr<std::string> p_unique = std::make_unique<int>(33); // Extract the raw pointer and pass it to an external class. ExternalClass obj(p_unique.get()); // Never do this, not safe.
question mark

Коли вважається доречним передавати унікальний вказівник?

Select the correct answer

Все було зрозуміло?

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

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

Секція 2. Розділ 4
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt