C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の「新しい配置」にはどのような用途がありますか?


このセクションでは、C++での配置の新しい演算子について説明します。この新しい配置は、新しい演算子の別のバリエーションです。通常のnew演算子は2つのことを実行します。メモリを割り当ててから、割り当てられたメモリにオブジェクトを作成します。

新しい演算子は、ヒープセクションにメモリを割り当て、そこでオブジェクトを作成します。ただし、配置の新しい演算子の場合は、指定されたアドレスにオブジェクトを作成します。新しい演算子を使用してメモリが割り当てられている場合は、メモリの割り当てを解除するためにdeleteキーワードを使用できます。ただし、新規配置の場合、配置削除機能はありません。

つまり、一言で言えば、配置newを使用すると、特定の変数にすでに割り当てられているオブジェクトをメモリ上に「構築」できます。これは、すでに割り当てられているのと同じメモリを再割り当ておよび再利用しない方が高速であるため、最適化に役立ちます。次のように使用できます:

new (address) (type) initializer

特定のタイプの新しいオブジェクトを作成するアドレスを指定できます。たとえば。

サンプルコード

#include<iostream>
using namespace std;
int main() {
   int a = 5;
   cout << "a = " << a << endl;
   cout << "&a = " << &a << endl;
   // Placement new changes the value of X to 100
   int *m = new (&a) int(10);
   cout << "\nAfter using placement new:" << endl;
   cout << "a = " << a << endl;
   cout << "m = " << m << endl;
   cout << "&a = " << &a << endl;
   return 0;
}

出力

a = 5
&a = 0x22fe34
After using placement new:
a = 10
m = 0x22fe34
&a = 0x22fe34

  1. C ++の文字リテラルとは何ですか?

    文字リテラルは、コンピュータプログラムのソースコード内で単一の文字の値を表現するためのプログラミングにおける一種のリテラルです。 C ++では、文字リテラルは定数文字で構成されます。これは、一重引用符で囲まれた文字で表されます。文字リテラルには2種類あります- 「a」などのchar型の小文字リテラル タイプwchar_tのワイド文字リテラル(Laなど) 文字リテラルに使用される文字は、改行(\ n)、円記号(\)、一重引用符()、doubleなどの予約文字を除き、任意のグラフィック文字にすることができます。引用符( )。予約文字はエスケープシーケンスで指定されます。たとえば、 例 #in

  2. Javaに欠けているC++機能は何ですか?

    C ++には見られるが、Javaには見られない多くの機能があります。それらのいくつかは以下にリストされています- Javaにはunsignedintオプションはありません ガベージコレクタがこの操作を実行するため、Javaにはデストラクタも「削除」もありません。 Javaにはフレンドクラスやフレンド関数はありません。 Javaにはポインタはありません。 Javaにはtypedefオプションはありません。 Javaは純粋にオブジェクト指向言語であるため、グローバル変数やグローバル関数はありません。 C ++に存在するテンプレートの概念は、Javaにはあり