Rustの所有権のことを学んでいたらC++に飛び火した件
というわけで、今日はRustの所有権の知識を深めていこうかと。
参考にしたのはQiitaのこの記事。
すると、まさかのC++の話が出てきました。unique_ptrの件です。
最近のC++のメモリアクセスにはauto_ptrがあるのは分かっていたのですが、C++11でObsoluteになっていたのは不覚でした…。
ちなみに、参考にしているのはこの記事です。
C++11からは、auto_ptr -> unique_ptr/shared_ptr/weak_ptrの3種類に増え、Rustの所有権システムに近いメモリ管理ができるようになりました(C時代もそうでしたが、メモリ管理がここらへんの最大の懸念事項でしたからね!)
RustでプログラミングしているときはWindows上のRust開発環境+VSCodeなのですが、せっかくVSを持っている(Unityを使う性格上、Visual Studio 2019 Communicationをインストールしています)わけですから使わない例は無いということで久しぶりにC++のプログラミングを。ついでにClang(LLVM)も入れちゃえ!
…あまりVisual Studioの使いみちはありませんでしたが、スマートポインタの存在はかなり勉強になりました。メモリリークとの戦いは本当に大変ですから…。
unique_ptrで宣言したint型オブジェクトをf関数で使用するときはmove関数で所有権を移動しないといけません。
こんな感じで所有権を明示的に移動できます。
Rustの場合は標準で所有権がつくため、これらのことを念頭に置かないといけない、と。面白い!
再びRustに戻ります。今回はcloneというメソッドを会得しています。
deepcopy(shallowcopy)を使えば、関数を呼び出しても元々の所有権は動かないままですから、プログラムが動くわけです(実際に動作して確かめています)
そこで、print_string変数の関数を返却しても問題ないか確認します。
実行してみると思い通りの結果になっていました(コメント参照)
…参照でできるやんという話は、勉強のため分かっていてやっているので野暮ってやつです(笑)
所有権の基本は本当に単純なんですねー。今の所気楽に対処できています。
一通り楽しんだところで今日は失礼いたします。参考のために、Rust公式ドキュメントの所有権と参照の箇所を載せておきます。
この記事が気に入ったらサポートをしてみませんか?