私はOOPの新人ではありませんが、変数が(C++、java、phpのように)オブジェクト全体を保持できないのはなぜか分かりません。だから、いつもポインタを使って作業することの利点は何ですか? 変数はオブジェクト自体ではなくオブジェクトへの参照を格納するのはなぜですか?
は答えて
自動対手動メモリ管理になります。 Javaや.NETのようなプラットフォームは、garbage collectorを実装する仮想マシン上で動作します。これはメモリの割り当てと破壊を自動的に管理します。これらのシステムでは、すべての変数は単一のベースであるObject
タイプから派生しています。
C++ は、オブジェクトインスタンスをスタックに格納する(つまり、ポインタとヒープに割り当てられない)ことができます。対照的に、C++には基本型を拡張しない多くのプリミティブ型(int
,float
など)があります。
zourtneyはこう述べています。「これらのシステムでは、すべての変数が単一の基本Object型から派生しています。これは混乱する可能性があります。 .NETでは、値型は最終的にObjectから継承されますが、その内容は「参照」ではなくスタックに格納されます。 –
点は、メモリ管理である...私はちょうどここに学ぶためにしようとしている、ありがとうございました。ポインターを使うことで、あなたのプログラムは、それが指す変数のコピーを常に作るわけではありません。
http://stackoverflow.com/questions/162941/why-use-pointers –
これは、OOPの要件ではありません。コンテンツ自体ではなく、いくつかの型への参照を格納する方が効率的です。複雑なオブジェクトを渡すのは非常に面倒ですが、オブジェクトの参照やアドレスを渡すだけでは非常に効率的です。ほとんどのプログラミング言語は、これらの概念の両方(値型と参照型)をサポートしています(Javaの作成者は、すべてがオブジェクトから継承することを選択します)。
.NETのような多くのプラットフォームは、軽量のオブジェクトのような種類の構造体を提供します。彼らは継承をサポートしていませんが、メンバーが多いかなり複雑な構造を持つことができます。構造体は複雑なデータ型をサポートしていても、値型です。もちろん、構造体が複雑すぎると効率が悪くなり、クラスを作るほうがよいでしょう。
「Javaの作成者はすべてがオブジェクトから継承されることを選択する」という部分を理解できませんでした。 Objectクラスではありませんか? – fabio
@ user532722はい。したがって、すべての型は参照を使用して終了します。 –
- 1. オブジェクトへの参照を格納する
- 2. iOS - 変数内のオブジェクトへの参照を格納する
- 3. オブジェクトではなく参照へのバインド
- 4. コールバック関数は、プロパティ自体を格納するオブジェクトですか?
- 5. C#でオブジェクトの参照をリストに格納する方法は?
- 6. データベース内のAWS S3オブジェクトへの参照を格納するベストプラクティス?
- 7. 構造体が独自のサイズを格納するのはなぜですか?
- 8. なぜオブジェクト[]はプリミティブを格納できますか?
- 9. なぜ可変参照ではなく、BufReaderへの不変参照を渡すだけですか?
- 10. C++の関数の中でオブジェクト参照を返すのはなぜですか?
- 11. (Python)関数自体は値ではなくリストに格納できます
- 12. インスタンス変数が別の変数への参照であっても、オブジェクトはGCに適格ですか?
- 13. Arrayオブジェクトにデータを格納できないのはなぜですか?
- 14. C++でオブジェクトへの参照を格納するのにどれくらいのメモリが必要ですか?
- 15. クラスのオブジェクトへのconst参照の格納
- 16. オブジェクトへの参照を保持する変数は値型ですか?あなたは単純なクラス持っ
- 17. std :: vectorの代わりにオブジェクトのコピーではなく参照を格納する
- 18. Javaでクラスへの参照を格納する方法は?
- 19. 子変数への参照を格納する基本クラス?
- 20. データベースエントリへの参照を変数に格納する効率
- 21. C++で別のベクトルのあるベクトルからオブジェクトへの参照を格納する方法は?
- 22. なぜオブジェクト参照変数static finalを宣言しますか?
- 23. なぜ、子オブジェクトへのインタフェース参照を使用するのですか?
- 24. なぜNSManagedObjectへの参照を格納すると更新できないのですか?
- 25. wierdの結果を生成するオブジェクトへの参照の格納
- 26. オブジェクトを直列化解除した後、オブジェクトが他のオブジェクトを参照しないのはなぜですか?
- 27. 検索時にchrome.storage.syncに格納されたオブジェクトのメソッドが関数ではないのはなぜですか?
- 28. なぜオブジェクトへの参照が維持されないのですか?
- 29. C++の関数への参照によって渡されたオブジェクトを返すのはなぜですか?
- 30. この変数で2つのオブジェクトが参照されているのはなぜですか?ノードmodule.jsファイルで
C++ *の変数はオブジェクト全体を保持できます。 Javaの変数はできません。 C#の変数は、クラスが 'System.ValueType'から継承する場合にのみオブジェクトを保持できます。 – cdhowie