C++の配置構文について聞いたことがあります。私はそれが何であるか混乱しています。ただし、stackoverflowの質問の下でどこで使用できるかはわかります。これがJavaにあるかどうかも混乱しています。だから私の質問は非常に正確です:配置の新しい演算子とは何ですか?Javaでそれのようなものがありますか?
スタックオーバーフローに関する他の質問と混同しないでください。これらはこの質問と重複していません。
C++の配置構文について聞いたことがあります。私はそれが何であるか混乱しています。ただし、stackoverflowの質問の下でどこで使用できるかはわかります。これがJavaにあるかどうかも混乱しています。だから私の質問は非常に正確です:配置の新しい演算子とは何ですか?Javaでそれのようなものがありますか?
スタックオーバーフローに関する他の質問と混同しないでください。これらはこの質問と重複していません。
次の記事では、C ++の新しい配置の意味について説明しています。http ://www.glenmccl.com/nd_cmp.htm
この用語自体は、オーバーロードされたnew
ステートメントに関連しています。Javaは演算子、特に新しい演算子をオーバーロードすることをまったく許可していないため、newの配置はJavaには関係ありません。
しかし、いくつかの選択肢があります。
「新しい配置」という用語自体はややあいまいです。この用語は、C ++標準では2つの異なる方法で使用されているため、C++コミュニティでは使用されています。
最初の意味は、複数のパラメーターを持つオーバーロードされた関数を指します。operator new
追加のパラメータは、ほぼすべてに使用できます。標準自体には、との2つの例がoperator new(size_t, void*)
ありoperator new(size_t,
std::nothrow_t const&)
ます。
2番目の意味は、特定のオーバーロードを指しますoperator new(size_t,
void*)
。これは、実際には、他の場所から取得したメモリ上のオブジェクトのコンストラクターを明示的に呼び出すために使用されます。つまり、割り当てを初期化から分離します。std::vector
(たとえば、capacity()
より大きい場合があるなどのクラスで使用されますsize()
。)
Javaでは、メモリ管理は言語に統合されており、ライブラリの一部ではないため、同等のものはありません。
newの配置では、追加のパラメーターを受け取るカスタムアロケーターを指定できます。
追加のパラメーターとしてポインターを受け取り、そのポインターの割り当ての結果として返される、事前定義された配置アロケーターもあります。これにより、基本的に、コードは指定したアドレスにオブジェクトを作成できます。
ただし、他のパラメータを使用する他のタイプのアロケータを定義できます。たとえば、デバッグアロケータは、追加のパラメータとして、ファイル名と割り当てが実行される行を取得します。この追加情報を割り当てられたオブジェクトに保存すると、特定のオブジェクトインスタンスが作成されたソースコードまでさかのぼることができます。たとえば、割り当て解除後にリーク、上書き、または使用されたものです。
AFAIK Javaは、より高い概念レベルで動作し、ポインターの概念はありません(nullポインター例外のみ;-))。メモリは単なるブラックマジックボックスであり、プログラマはメモリアドレスの概念を使用することはありません。
私はJava1.1しか知らなかったので、当時はその商用製品に時間を費やさないことに決めました。そのため、ランダムアクセスメモリの概念に到達するために、Javaの論理レベルが今日十分に低下している可能性があります。