Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ユニークポインタのムーブ | スマートポインタの導入
C++スマートポインタ
セクション 1.  3
single

single

bookユニークポインタのムーブ

メニューを表示するにはスワイプしてください

コピーは許可されていません

std::unique_ptr は動的に確保されたオブジェクトを管理し、そのスコープを抜けたときに適切に削除するスマートポインタです。管理対象オブジェクトに対して排他的所有権を持ち、同じオブジェクトを同時に複数の std::unique_ptr が所有することはできません。

main.cpp

main.cpp

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 から他方へ移され、元のポインタは空になります。

main.cpp

main.cpp

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 を使用すると、オブジェクトの所有権が一方のユニークポインタから別のユニークポインタへ移動します。この操作の後、元のポインタはオブジェクトの所有権を失い、新しいポインタがその所有者となります。

タスク

スワイプしてコーディングを開始

次のコードを完成させ、動的に確保された整数(値は42)の所有権が unique_pointer_a から unique_pointer_b へ安全に移動されるようにしてください。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  3
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt