タグ

C++とclassに関するadvblogのブックマーク (2)

  • C#とC++のクラス型の変数宣言の違い - 時計屋の雑記帳

    多分、これが混乱させてる大元。*1 class変数を宣言するとき、、、 hoge h;みたいに書くわけですが、これが、C#とC++で90度くらい意味が違う。 C#の場合 classの場合は、必ず自由領域*2にインスタンスが存在するわけで、じゃあ、"h"とは何か?と言えば、何のことはなく単なるManaged Heapへの参照を保持しているにすぎないことになる。*3従って、インスタンスを作成するためには、new演算子でManage Heapに領域を確保して、クラスコンストラクタを走らせて初期化させた上で、インスタンスを作成する必要がある。 このようなことから、C#においちゃ、必ず以下のようになるわけで hoge h=new hoge(<なんちゃらかんちゃら>); //以下"h."でメンバにアクセス可能 //hに、他のインスタンスを参照させ直すことも可能 //hのスコープが外れても他で参照されて

    C#とC++のクラス型の変数宣言の違い - 時計屋の雑記帳
  • じゃあ、C++のclassって、C#で言うと何なのさ? - 時計屋の雑記帳

    多分、以下はほぼ無意味。異言語だし、たとえて言えばC++のclassって、Cの何なのさ?って意味くらい間違ってる。*1けど、自分の理解のために敢えて書く(w 前振りはその辺にして、、、こんな風になるかなと思う。*2 言語 キーワード スタックに取れるか ヒープに取れるか 継承できるか デフォルトコンストラクタ*3を作成できるか "="にしたときの意味*4 C++ class ○ ○ ○ ○ Op=に依存 C++ struct ○ ○ ○ ○ Op=に依存 C# class × ○ ○ ○*5 変数は常に、参照型なので参照先がコピーされるだけ。 C# struct ○ △*6 × ×*7 変数は常に値型*8なので、メンバの中身がコピーされる。 見ればわかるとおり、C#のclassはどこまで行っても、自由領域に取られるべきモノであり、変数は常に作成されたインスタンスへの参照となる。C#のstr

    じゃあ、C++のclassって、C#で言うと何なのさ? - 時計屋の雑記帳
  • 1