タグ付けされた質問 「new-operator」

16
delete []はどのようにしてそれが配列であることを認識しますか?
了解しました。渡された内容によっては、次のコードで何が起こるかは未定義であることに私たちは皆同意していると思います。 void deleteForMe(int* pointer) { delete[] pointer; } ポインタはあらゆる種類のものである可能性があるため、無条件delete[]で実行することは未定義です。ただし、実際に配列ポインターを渡しているとしましょう。 int main() { int* arr = new int[5]; deleteForMe(arr); return 0; } 私の質問は、ポインターが配列であるこの場合、これを知っているのは誰ですか?つまり、言語/コンパイラの観点からarrは、配列ポインターか単一のintへのポインターかはわかりません。一体、arr動的に作成されたかどうかさえわかりません。しかし、代わりに次のようにすると、 int main() { int* num = new int(1); deleteForMe(num); return 0; } OSは、intを1つだけ削除し、そのポイントを超えて残りのメモリを削除することで、ある種の「強制終了」を行わないほどスマートです(それとstrlen、\0終端されていない文字列とは対照的です-それまでは続きます)ヒット0)。 では、これらのことを覚えておくことは誰の仕事なのでしょうか。OSは何らかのタイプの記録をバックグラウンドで保持しますか?(つまり、何が起きるかは未定義であると言ってこの投稿を始めたことを私は理解していますが、実際、「殺害酒宴」シナリオは発生しないため、実際の世界では誰かが覚えています。)


8
mallocとnew —異なるパディング
高性能コンピューティング(10 ^ 5-10 ^ 6コア)にMPIを使用するプロジェクトのために、他の誰かのC ++コードをレビューしています。コードは、異なるアーキテクチャ上の(潜在的に)異なるマシン間の通信を可能にすることを目的としています。彼は次のようにコメントを書いています。 通常はnewandを使用しますdeleteが、ここではmallocand を使用していfreeます。これが必要なのは、一部のコンパイラは、new使用時にデータに異なるパディングを行うため、異なるプラットフォーム間でのデータ転送でエラーが発生するためです。これはで発生しませんmalloc。 これは、私が標準new対malloc質問から知っている何にも適合しません。 new / deleteとmalloc / freeの違いは何ですか?コンパイラがオブジェクトのサイズを異なる方法で計算する可能性があるという考えをほのめかします(しかし、なぜそれが使用と異なるのsizeofですか?) mallocと配置new vs. newはかなり人気のある質問ですがnew、mallocそうでない場合のコンストラクタの使用についてのみ話しますが、これは関係ありません。 mallocはどのようにアラインメントを理解しますか?メモリはどちらかと適切に整列することが保証されているか、newまたはmalloc私が以前考えていたものであると述べています。 私の推測では、彼は過去に自分のバグを誤って診断し、それを推定しnewてmalloc、異なる量のパディングを提供していると思いますが、これはおそらく正しくないと思います。しかし、Googleや以前の質問で答えを見つけることができません。 StackOverflow、私を助けてください、あなたは私の唯一の希望です!


7
Rubyで既存のハッシュに追加する方法
key => valueRubyの既存の入力済みハッシュにペアを追加することに関して、私はApressのBeginning Rubyに取り組んでいる最中で、ハッシュの章を終えました。 私はこれが配列で行うのと同じようにハッシュで同じ結果を達成する最も簡単な方法を見つけようとしています: x = [1, 2, 3, 4] x << 5 p x
102 ruby  new-operator  hash 

3
Scalaの「新しい」キーワード
非常に簡単な質問があります。Scalaでオブジェクトを作成するときに、いつ新しいキーワードを適用すればよいですか?Javaオブジェクトのみをインスタンス化しようとしたときですか?

5
C ++でどのように「再割り当て」しますか?
reallocC ++でどのようにできますか?それは言語から欠落しているようです-ありますがnewありdeleteませんresize! プログラムがより多くのデータを読み取るにつれて、それを保持するためにバッファーを再割り当てする必要があるため、これが必要です。delete古いポインタを使用してnew、新しい、より大きなポインタを使用することは正しい選択肢ではないと思います。

4
式にはクラスタイプが必要です
私はしばらくの間C ++でコーディングしておらず、この単純なスニペットをコンパイルしようとすると行き詰まりました。 class A { public: void f() {} }; int main() { { A a; a.f(); // works fine } { A *a = new A(); a.f(); // this doesn't } }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.