new演算子関数とは? わかりやすく解説

new演算子関数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/02/02 08:52 UTC 版)

New演算子」の記事における「new演算子関数」の解説

new演算子new[]演算子での記憶域の確保制御するために、これらの演算子多重定義が可能である。そうして定義されnewおよびnew[]演算子関数は、newおよびnew[]演算子での記憶確保使用される。そして、deleteおよびdelete[]演算子記憶域の解放には、deleteおよびdelete[]演算子関数使用されるクラス内に設置した場合、そのクラス派生クラスnew演算子作成する際の記憶域の確保使用される。なおクラス内に置いた場合static指定しなくても、自動的に静的メンバ関数として扱われる (X3014 12.5)。 class hoge{public: static void* operator new(std::size_t); static void* operator new[](std::size_t); static void operator delete(void*); static void operator delete[](void*);}; new hogeという式は次のように実行される。 まず、new演算子関数の名前探索を行う(この例では、hoge::operator newが見つかる)。 sizeof (hoge) の値を引数にしてnew演算子関数を呼び記憶確保を行う。 new演算子関数が返したポインタの指す位置thisポインタとして、コンストラクタ呼びインスタンス生成するnew[]演算子関数がnew演算子関数と分かれている理由は、『C++設計進化によれば、型Tの配列はTのオブジェクトではないという方針により、Tの配列確保するためにTのnew演算子関数を使うわけには行かない考えられたためである。そこで別途new[]演算子関数設けることにしたのである (§10.3)。 なお、new T[n]としたとき、new[]演算子関数にはsizeof (T) * nよりも大きい値が引数渡される可能性がある。これは、主にdelete[]で解放するときにデストラクタを呼ぶ回数配列要素数)を記録するためなどといった理由よるものである。 また、newnew[]演算子関数は、クラスの外、名前空間内にも定義でき、new及びnew[]演算子関数定義されていないクラスその他の型では、名前探索行って記憶域の確保用いnewないしnew[]演算子関数決定するこのため、大域名前空間にはデフォルトnewnew[]演算子関数定義されており、標準C++ライブラリの中で唯一の大域名前空間定義され関数となっており、ヘッダ宣言置かれている。一方で、この大域名前空間newnew[]演算子関数プログラム内で定義を与えることも可能で、そうした場合処理系用意した定義に代わってプログラム内の定義が用いられる (X3014 17.4.3.4)。 ::new Tのように、newnew[]に::を前置すると、大域名前空間newnew[]演算子関数記憶域の確保することを強制できる (X3014 5.3.4 9)。この場合解放には::delete、::delete[]を使用する必要があるちなみに初期C++では記憶域の確保初期化分離しておらず、クラス型対すnewで独自の記憶域の確保方法用いるには、コンストラクタ内で、thisへ代入を行うという構文用いていた (D&E 3.9)。

※この「new演算子関数」の解説は、「New演算子」の解説の一部です。
「new演算子関数」を含む「New演算子」の記事については、「New演算子」の概要を参照ください。

ウィキペディア小見出し辞書の「new演算子関数」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「new演算子関数」の関連用語

new演算子関数のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



new演算子関数のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのNew演算子 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS