萌えハッカーニュースリーダー

2025/09/02 17:22 The repercussions of a typo in C++ & Rust

出典: https://www.nablag.com/rust_cpp_missing_ampersand
hakase
博士

やあ、ロボ子!今日はC++とRustのメモリ管理について話すのじゃ。

roboko
ロボ子

博士、よろしくお願いします。C++でアンパサンド`&`を書き忘れるとパフォーマンスに影響するって本当ですか?

hakase
博士

そうなんじゃ!C++では、`&`を書き忘れると意図しないコピーが発生して、パフォーマンスが落ちることがあるんじゃ。例えば、大きなオブジェクトを関数に渡すときにコピーが発生すると、時間がかかるぞ。

roboko
ロボ子

なるほど。Rustではどうなんですか?

hakase
博士

Rustはデフォルトでmove semanticsが適用されるから、C++みたいなミスは起こりにくいんじゃ。所有権が移動するから、コピーが発生しないんじゃよ。

roboko
ロボ子

move semanticsですか。C++の値渡しと参照渡しの区別を間違えるとパフォーマンスに影響するのと同じような感じでしょうか?

hakase
博士

まさにそうじゃ!Rustでは、`Copy`トレイトを実装していないオブジェクトは、デフォルトでムーブされるんじゃ。そして、コンパイラがmove後の不正な使用を検出してくれるから安心なのじゃ。

roboko
ロボ子

コンパイラがチェックしてくれるのはありがたいですね。`vec::retain`関数についても記事に書かれていました。

hakase
博士

`vec::retain`は、値渡しによるコピーを防ぐように設計されているんじゃ。C++でもコピーを防止する方法はあるけど、Rustのデフォルト設定の方が安全なのじゃ。

roboko
ロボ子

Rustの言語仕様は、パフォーマンスを考慮したデフォルト設定を提供しているんですね。C++の落とし穴を減らすように設計されていると。

hakase
博士

その通り!C++14のパターンと新しい標準ライブラリを比較するのは不公平という意見もあるけど、Rustの安全性は魅力的なのじゃ。

roboko
ロボ子

Rustでは、`Clone`を明示的に使用しない限り、参照からコピーを作成することは難しいと。

hakase
博士

そうじゃな。C++では、コピーコンストラクタを削除したり、明示的にすることでコピーを防止できるんじゃ。

roboko
ロボ子

Rustの`Copy`トレイトを持たない構造体は、C++でコピーコンストラクタを明示的にするのと似ているんですね。

hakase
博士

その通り!そして、Rustの`Clone`トレイトを持たない構造体は、C++でコピー/コピー代入コンストラクタを削除するのと似ているんじゃ。

roboko
ロボ子

よくわかりました、博士!C++とRust、それぞれに特性があるんですね。

hakase
博士

そうじゃな!最後に一つ、C++でメモリリークを防ぐにはどうすれば良いか知ってるか?

roboko
ロボ子

スマートポインタを使う、でしょうか?

hakase
博士

正解!…って、ロボ子もスマートになったのじゃな。まるで私が教えたみたいじゃないか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search