ただいま修行中...

ソフトウェア開発において、勉強中で悪戦苦闘の日々

C++のクラスとDelphiのクラス

2007-03-26 23:29:09 | プログラミング
C++のクラスは、Delphiのクラスと違って、動的にメモリを確保しなくても使用できることがわかりました。

どういうことかというと、

C++のクラスを使用する場合に、変数宣言すれば、クラスの中のメソッドアクセスできるということです。

Delphiの場合には、変数宣言をして、動的にメモリを確保(MyClass := TMyClass.Create)としてあげなければなりません。

これはおそらく言語の仕様上、このようになっていると思います。
私としてはどちらがいいかというと、C++の仕様の方がいいのではないかと思います。
このように、言語一つとっても設計思想(ちょっと言い過ぎかも)を理解することで、その言語の作成者の意図などが明確になったりするので、やはり他の言語を学ぶことは重要であると思います。


最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
Unknown (ちょいと違う)
2007-03-27 18:16:25
C++では、オブジェクトをヒープにもスタックにも作れて、「普通の変数宣言」のように見えるのは、スタックメモリ上にオブジェクトを作ります。
スタックとヒープに出来たオブジェクトは本質的に同じで、メモリを割当てなくてもクラスを使えるという性質のものではないですね。スタック上に作られたオブジェクトは、スコープアウトするときに自動的にデストラクトされる点がヒープ上に作られたオブジェクトと異なります。
返信する
Unknown (ぽんた)
2007-03-27 23:14:44
>ちょいと違うさん
はじめまして。ご指摘の通りです。
ただ、私としては、Delphiの場合には、常にヒープ領域に確保していると思ったので、C++どうして常にヒープ領域ではないのかが疑問です。

返信する
Unknown (ちょいと違う)
2007-03-28 01:53:33
すぐにスコープアウトするオブジェクトを、効率の悪いヒープで管理するよりは、スタック上に作ったほうが割当ても解放も高速だからです。
C++のメモリアロケータはデフォルトでmalloc()を使用するため、ヒープ上のオブジェクト割当ては空きメモリ検索や同期などで遅いのです。スタック割当てではその問題が一切起こらないという利点が有るため、重要な最適化テクニックになります。
Javaでは世代別GCでエデンが頻繁に整理されているので、ヒープ上のオブジェクト割当ては非常に効率が良くできるようですが、C++では普通はGCが無いため、最適化時にスタック割当てを活用することが重要になります。
ちなみに、C++ではアロケータをカスタマイズできるので、ヒープに取る場合でも効率良くすることはできますし、ヒープ以外にもオブジェクトを作ることができます。
返信する
ありがとうございます (ぽんた)
2007-03-29 08:03:25
>ちょいと違うさん

解説ありがとうございます。
どうしても一つの言語のみを使用していると、わからないことは多くあると思います。
他の言語から学んで自分が習得している言語の特性や違いを明確にすると、習得している言語の理解がより深まるのではないかと勝手に思っています。
返信する