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

C++での新しい演算子の配置


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

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

つまり、一言で言えば、配置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++でクラスのメンバーにアクセスするために使用されます。それらはさまざまなシナリオで使用されます。 C ++では、クラス、構造体、または共用体として宣言された型は「クラス型」と見なされます。したがって、以下はそれらの両方を指します。 a.bは、bがオブジェクトのメンバー(またはオブジェクトへの参照[1])である場合にのみ使用されます。したがって、a.bの場合、aは常にクラスの実際のオブジェクト(またはオブジェクトへの参照)になります。 a→bは基本的に(* a).bの省略表記です。つまり、aがオブジェクトへのポインタである場合、a→bはポイントするオブジ

  2. C++の単項演算子

    単項演算子は、単一のオペランドに作用して新しい値を生成する演算子です。単項演算子は次のとおりです。 演算子 説明 間接演算子(*) ポインタ変数を操作し、ポインタアドレスの値と同等のl値を返します。これは、ポインタの「逆参照」と呼ばれます。 演算子のアドレス(&) 単項アドレス演算子(&)は、そのオペランドのアドレスを取ります。アドレスオブ演算子のオペランドは、関数指定子またはビットフィールドではなくレジスタストレージクラス指定子で宣言されていないオブジェクトを指定するl値のいずれかです。 単項プラス演算子(+) 単項プラス演算子(+)の結果は