- ベストアンサー
C++とC#って何が違うのですか?
C++とC#って根本的に何が違うのでしょうか? 私はC言語でちょっとしたプログラミングをするか、C#で電卓くらいしか作れないのですが、「C++はメモリ管理が大変」とか聞きますが、どのように大変なのですか?配列の宣言と削除くらいしか知らない超ど素人です。。 そもそもメモリを気にするほどのアプリケーションを作れないのでイマイチC++の大変さんがわかりません。 あとC#にポインタがないと聞きますが、ないとどういう問題が起こるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
・メモリ管理 明示的にメモリを確保したときに、C/C++とC#とで動作の違いがあります。 C#でが、new で配列やクラスオブジェクトなどを確保できます。 これらの確保されたものは、もう使用しない(正確には「使用できない」)と判断されると、自動で解放されます。 プログラマから見たら、特に考える必要がないのです。 対し、C言語では、配列宣言では定数しか使えません。 状況に応じた大きさの配列を確保するには、そのための関数(malloc. calloc)を使用します。が、この方法で確保したメモリは,明示的に解放しないかぎり(free関数)自動では解放は行われません。 C++でも new/delete演算子と書き方は変ってますが、同様です。 プログラムのどこでどれだけ確保して、それをどこで解放するか、全てプログラマが管理しなければなりません。 解放を忘れると、メモリ不足になります。確保を忘れたり,大きさを間違えたり、解放するタイミングを間違えると、重大なエラーとなります。困ったことに、こういうのはコンパイルエラーとしてはほとんど出ないので、間違いに気付きにくいのです。 「C++はメモリ管理が大変」とは、このあたりのことを言ってるのだと思います。 C++でもC#のように自動で管理させる方法があります。が、それはそれで別の面倒くささがあったりします。 ・ポインタが無い 無いわけではありません。存在はします。 が、「安全ではない」操作とされ、使用するにはいろいろ面倒な手続きが必要です。 C/C++で作ったDLLとをC#で使うなど、特殊な用途以外では使うことは無いでしょう。 C/C++でポインタ使ってやってることは、C#では参照型/参照渡しを使うことで、ほとんどは実現可能です。
その他の回答 (1)
- kotoby2003
- ベストアンサー率15% (280/1755)
C#はJavaに近いです。 メモリ管理が大変、というのは無能な人の方便です。 きちんと作っていればなんの問題もありません。 が、きちんとメモリ管理を意識しないとトラブルになる、というのは事実ではあります。 ポインタが使えなくても、まったく何も問題ないです。 もちろんC++をやるならポインタを知らないと話にならないです。 プログラミング言語は私にとってはどの言語も大した違いは感じませんが、それでも違いはあるんじゃないかと問われれば、C++とC#じゃ、ぜんぜん違う、と答えるでしょうね。 C++が出来ればC#も出来るが、C#が出来るからといってC++が出来るとは限らない、といったところです。
お礼
ありがとうございます。ポインタはどういうものなのかわからないですが、会社のプログラマの方からはポインタを覚えるのが大変ということであまりオススメされていません。
お礼
ありがとうございます。わかりやすくて参考になりました。 ゲームプログラミングの勉強をしたいのですが、C#よりもC++のほうが合っているようですのでC++を選ぼうかと思います。