どのように私は固定場所で新しいを使用してメモリを割り当てるのですか?私の本はこう言っています:どのようにして所定の場所にメモリを割り当てますか?
char *buf=new char[sizeof(sample)];
sample *p=new(buf)sample(10,20);
ここで、newはbufのアドレスにメモリを割り当て、(10,20)は渡される値です。しかし、サンプルは何ですか?それはアドレスかデータ型ですか?
どのように私は固定場所で新しいを使用してメモリを割り当てるのですか?私の本はこう言っています:どのようにして所定の場所にメモリを割り当てますか?
char *buf=new char[sizeof(sample)];
sample *p=new(buf)sample(10,20);
ここで、newはbufのアドレスにメモリを割り当て、(10,20)は渡される値です。しかし、サンプルは何ですか?それはアドレスかデータ型ですか?
は、私はこれは本当にあなたの便宜のために2と書かれたコードの4行、ある
char *buf=new char[sizeof(sample)];
sample *p=new(buf)sample(10,20);
...あなたにこのコードを説明しましょう。
char *buf; // 1
buf = new char[sizeof(sample)]; // 2
sample *p; // 3
p = new(buf)sample(10,20); // 4
1行目と3行は説明が簡単で、両方ともポインタを宣言しています。 buf
はchar
へのポインタであり、p
はsample
へのポインタです。さて、sample
が何であるかわかりませんが、それ以外のクラスが定義されているか、またはtypedef
(多かれ少なかれ新しい名前が付けられています)でもどちらかのデータ型のいずれかであると推測できますが、どちらでもsample
ただメモリのブロックを割り当て、私たちのchar pointer
はbuf
と呼ばれるそれを割り当てている2行目int
またはstring
をリンクデータ型として考えること。サンプルは2つのintを含むクラスで、これは(ほとんどのコンパイラの下では)8バイト(intごとに4)になることを意味します。そして、buf
は、char
を保持するために確保されたメモリブロックの先頭を指しています。
4行目は大きな複合体を取得します。 p = new sample(10,20)
の場合は、タイプsample
の新しいオブジェクトを作成し、2つのint
を渡して、この新しいオブジェクトのアドレスをポインタp
に格納する単純なケースになります。 (buf)
を追加すると、基本的にnew
には、buf
が指すメモリを使用するように指示されます。
最終的な効果は、1つのメモリブロック(多かれ少なかれ8バイト)が割り当てられており、2つのポインタがそれを指していることです。ポイントの1つ、buf
は、そのメモリを8文字で見ていて、それ以外のものはp
で、単一のものはsample
です。
なぜこれを行うとしますか?
通常、そうはなりません。現代のC++はnew
の訴訟をかなり冗長にしました。オブジェクトを扱う多くのより良い方法があります。私は、この方法を使用する主な理由は、何らかの理由でメモリのプールを確保したい場合です。大きなブロックのメモリを取得するには時間がかかるため、時間を節約できる可能性があります。あなたはこのような何かをする必要があると思うならば、あなたは
ビットエクストラ間違ったことを解決しようとしている私が埋め込まれたと多くの経験を持っていないほとんどの部分について
、または私はこれを見たことがない。
投稿したコードは基本的には同じことですsample *p = new sample(10,20)
どちらの方法もsample
オブジェクトが作成されている場所を制御していません。
また、newを使用してオブジェクトを動的に作成する必要はないと考えてください。
void myFunction(){
sample p = sample(10,20);
}
これは自動的にsample
オブジェクトを作成します。このメソッドは、読みやすく理解しやすく、オブジェクトの削除を心配する必要がないため、関数が返されたときにクリーンアップされるので、はるかに望ましい方法です。
あなたは本当にunique_ptr<sample>
このようなものは、(あなたの動的なオブジェクトの作成を使用する能力を与えるが、タイプsample
のオブジェクトを削除するあなたのマニュアルの手間を節約する、スマートポインタの使用を考慮し、動的なオブジェクトを利用するために必要がある場合私はあなたの人生はこれについての詳細に向かって指すことができます)
私の本は、モバイルデバイスやその他の組み込みシステム向けのプログラミング環境の配列には、配置の新しい割り当てが必要だと言っています。この本はYahsavant Kanetkarの "Let us C++"です。 – Nirvan
私は言いたいことがあるので、あなたの答えを更新する – thecoshman
これはデータ型またはtypedefです。
それは私が意味するものではありません。サンプルはクラスですが、私が求めていたのは、最後の行の "サンプル"です。 – Nirvan
@Nirvan:最後の行に 'sample'の2番目の出現を意味しました。私はあなたが最初のことを意味していると思った –
@thecoshmanよく私はstackoverflow.comに新しいので、心配して今すぐに留意し、より多くの回答を受け入れる – Nirvan