1

C++の配置構文について聞いたことがあります。私はそれが何であるか混乱しています。ただし、stackoverflowの質問の下でどこで使用できるかはわかります。これがJavaにあるかどうかも混乱しています。だから私の質問は非常に正確です:配置の新しい演算子とは何ですか?Javaでそれのようなものがありますか?

スタックオーバーフローに関する他の質問と混同しないでください。これらはこの質問と重複していません。

4

3 に答える 3

3

次の記事では、C ++の新しい配置の意味について説明しています。http ://www.glenmccl.com/nd_cmp.htm

この用語自体は、オーバーロードされたnewステートメントに関連しています。Javaは演算子、特に新しい演算子をオーバーロードすることをまったく許可していないため、newの配置はJavaには関係ありません。

しかし、いくつかの選択肢があります。

  1. ファクトリまたはビルダーパターンを使用する
  2. メソッドをラップすることで一部のクラス機能を変更できるラッパー/デコレータパターン(おそらくファクトリと一緒に)を使用します。
  3. アスペクト指向プログラミング。デコレータパターンとほぼ同じように機能しますが、バイトコード変更を使用して実装できます。
  4. クラスローダーのインターセプト
于 2011-09-14T06:16:37.893 に答える
2

「新しい配置」という用語自体はややあいまいです。この用語は、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では、メモリ管理は言語に統合されており、ライブラリの一部ではないため、同等のものはありません。

于 2011-09-14T08:16:12.450 に答える
-1

newの配置では、追加のパラメーターを受け取るカスタムアロケーターを指定できます。

追加のパラメーターとしてポインターを受け取り、そのポインターの割り当ての結果として返される、事前定義された配置アロケーターもあります。これにより、基本的に、コードは指定したアドレスにオブジェクトを作成できます。

ただし、他のパラメータを使用する他のタイプのアロケータを定義できます。たとえば、デバッグアロケータは、追加のパラメータとして、ファイル名と割り当てが実行される行を取得します。この追加情報を割り当てられたオブジェクトに保存すると、特定のオブジェクトインスタンスが作成されたソースコードまでさかのぼることができます。たとえば、割り当て解除後にリーク、上書き、または使用されたものです。

AFAIK Javaは、より高い概念レベルで動作し、ポインターの概念はありません(nullポインター例外のみ;-))。メモリは単なるブラックマジックボックスであり、プログラマはメモリアドレスの概念を使用することはありません。

私はJava1.1しか知らなかったので、当時はその商用製品に時間を費やさないことに決めました。そのため、ランダムアクセスメモリの概念に到達するために、Javaの論理レベルが今日十分に低下している可能性があります。

于 2011-09-14T06:12:55.653 に答える