所有権
Ownership
プログラミング言語では、特に、オブジェクトの破棄権限を誰が持っているかを示す。
オブジェクトは不要になった時に破棄されなければならない。
破棄されたオブジェクトにアクセスしてはならない。
所有権を持っているなら、自分だけが破棄権限を持っている事が明らかなので、安全に破棄する事ができる。(二重破棄の問題が起きない。)
所有権がなければ、破棄した状態が明らかなので、破棄されたオブジェクトにアクセスする事はなくなる。
参照は所有権があるかどうかを示すポインタを間接的に指すようにする。これにより、複数からの参照でも、安全に行う事ができる。破棄されたオブジェクトにアクセスする事はなくなる。
Rust では所有権を言語仕様に含んでいる。
C++ では std::unique_ptr, std::shared_ptr, std::weak_ptr を使うことで所有権を扱う事ができる。
C++11 まではstd::auto_ptr テンプレートで所有権を扱う事ができたが、移動ではなくコピーで所有権が移動するという根本的な設計ミスのために非推奨になり、C++17で削除された。
ガーベジコレクションを行う言語では、参照の存在の有無でオブジェクトの破棄を管理しているため、所有権の概念を持たない。 関連