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

新しい演算子とC++の新しい演算子の違いは?


C ++では、新しいオブジェクトを作成するときに、メモリにメモリブロックを作成する必要があります。次に、コンストラクタを呼び出してメモリブロックを初期化します。 newキーワードを使用してメモリ要素を作成できます。この新しいオペレーターは、2つの連続したタスクを実行しています。ただし、演​​算子newは、メモリ空間を作成するだけです。

新しいキーワード

new演算子は特殊なタイプの演算子であり、ヒープセクションでのメモリ割り当ての要求を示します。十分なメモリが利用可能な場合、新しいオペレータのみがメモリをポインタ変数に初期化します。通常のnewkeywordを使用してオブジェクトを作成すると、2つの連続したタスクが実行されます

  • ?オブジェクトのメモリブロックをヒープセクションに割り当てます
  • ?コンストラクターを呼び出して、メモリブロックを初期化します。

サンプルコード

#include <iostream>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

出力

Constructor called!

オペレーター新規

演算子newは関数です。この関数は、new演算子をオーバーロードするために使用されます。これを使用して、rawメモリブロックを割り当てることができます。これは、概念的にはmalloc()またはcalloc()関数に似ています。この関数はコンストラクターを呼び出さないため、メモリは初期化されません。ただし、このオーバーロードされたメソッドからポインターを返した後、コンパイラーはその後コンストラクターを呼び出します。

サンプルコード

#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
   void *operator new(size_t size) {
      cout << "Call Operator New"<<endl;
      void *p = malloc(size);
      return p;
   }
};
int main() {
   Box* myBox = new Box;
}

出力

Call Operator New
Constructor called!

  1. C ++のドット(。)演算子と->の違いは何ですか?

    ドットと矢印の演算子は、どちらもC++でクラスのメンバーにアクセスするために使用されます。それらはさまざまなシナリオで使用されます。 C ++では、class、struct、またはunionとして宣言された型は、「クラス型」と見なされます。したがって、以下は3つすべてを指します。 a.bは、bがオブジェクトのメンバー(またはオブジェクトへの参照[1])である場合にのみ使用されます。したがって、a.bの場合、aは常にクラスの実際のオブジェクト(またはオブジェクトへの参照)になります。 a→bは基本的に(* a).bの省略表記です。つまり、aがオブジェクトへのポインタである場合、a→bはポイ

  2. !==と==の違い! PHPの演算子

    !==比較演算子 !==演算子は、型チェックを使用して2つのオブジェクトの不等式をチェックします。データ型を変換せず、型付きチェックを行います。たとえば、1!==1の結果はtrueになります。 ==!比較演算子 ==!演算子は2つの演算子の組み合わせであり、==(!operands)と書くことができます。 例 次の例は、「!==」と「==!」の使用法を示しています。演算子。 <!DOCTYPE html> <html> <head>    <title>PHP Example</title> </hea