1. ホーム
  2. c++

[解決済み] new operator」と「operator new」の違い?

2022-06-06 22:55:45

質問

new operatorとquot operator newの違いはなんですか?

どのように解決するのですか?

私は通常、この2つをもう少しうまく区別するために別の言い方をしようとしますが、いずれにせよ良い質問ですね。

演算子 new は生のメモリを割り当てる関数です -- 少なくとも概念的には、これは malloc() . 自分のコンテナのようなものを書いているのでなければ、かなり珍しいことですが、次のように直接 operator new を呼び出すことができます。

char *x = static_cast<char *>(operator new(100));

また、グローバルに、あるいは特定のクラスに対して、operator new をオーバーロードすることも可能です。IRCでは、そのシグネチャは

void *operator new(size_t);

もちろん、(グローバルまたはクラス用の)new 演算子をオーバーロードする場合、対応する delete 演算子もオーバーロードしたい/する必要があります。価値あることとして、配列のメモリを割り当てるために使用される別の演算子 new[] もありますが、その混乱全体を完全に無視する方が良いのはほぼ確実です。

new 演算子は通常、フリーストアからオブジェクトを作成するために使用するものです。

my_class *x = new my_class(0);

両者の違いは、オペレータの新しい だけ が生のメモリを割り当てただけで、他には何もしていないことです。new 演算子はメモリを確保するために new 演算子を使用することから始まりますが、次に適切なタイプのオブジェクトのコンストラクタを呼び出すため、結果としてそのメモリに実際のオブジェクトが作成されることになります。そのオブジェクトが他のオブジェクトを含んでいる場合(組み込みまたはベースクラスとして)、それらのコンストラクタも同様に呼び出されます。