文法:
ポインタ = new 型; ポインタ = new 型( 初期化子 ); ポインタ = new タイプ[サイズ]; ポインタ = new( 引数リスト ) 型...
new演算子(C++だけで有効です)は、指定された型の変数を保持するのに必要なメモリを割り当てて、そのメモリへのポインタを返します。 オプションとしては追加の初期化子を使用すると、メモリの初期化を行うことができます。もしもタイプがクラスの場合にはコンストラクタへ渡す引数になります。
配列の確保に関してはブラケット([])でサイズを渡すことによって行うことができます。ただし、この場合には初期化子を与えることはできませんので、デフォルトのコンストラクタが確保されます。
オーバーロードされたバージョンのnew()を作成すると、任意のフォーマットで変数の数を渡すのに使用することができます(自信なし)。 もっとも便利に使われるのは、使用可能なメモリがなかった時に例外を投げなくなるという”nothrow”という引数です:
Foo *foo; // Fooはクラスで、fooはFooクラスのオブジェクトへのポインタ foo = new(nothrow) Foo(); assert( foo );
代わりに、クラスのnew()関数をオーバロードして、任意の引数を渡せるようになります:
class Base { public: Base() { } void *operator new( size_t size, string str ) { cout << "新しいオブジェクト '" << str << "' のための " << size << " バイトのメモリ割り当てのログ" << endl; return malloc( size ); } int var; double var2; }; ... Base* b = new ("Baseのインスタンス1") Base;
もし、intが4バイトで、doubleが8バイトの場合には、上記のコードを実行すると下記のように出力されます。
新しいオブジェクト 'Baseのインスタンス1' のための 12 バイトのメモリ割り当てのログ
newで確保したメモリはdelete演算子で開放します。もしも配列のバージョンのnew演算子を使用した場合には、配列バージョンのdelete演算子を使用してください。