「newとdelete」の版間の差分
提供: C++入門
(ページの作成:「<!-- vim: filetype=mediawiki --> C++ の new 演算子 と delete 演算子は、メモリの動的な確保と解放に使用します。 読み方 ; new : に...」) |
細 |
||
行66: | 行66: | ||
== 関連項目 == | == 関連項目 == | ||
+ | * [[配列]] | ||
* [[boost::array]] | * [[boost::array]] | ||
* [[C++言語解説]] | * [[C++言語解説]] |
2013年3月23日 (土) 21:48時点における版
C++ の new 演算子 と delete 演算子は、メモリの動的な確保と解放に使用します。
読み方
- new
- にゅー
- delete
- でりーと
概要
new と delete は、 C言語 における malloc() と free() の関係に似ています。 new でメモリを確保した場合、使い終わったら、明示的に delete で解放しなければなりません。 new は、ポインタを返します。
new を呼び出すと、型のコンストラクタが呼び出されます。delete を呼び出すと、デストラクタが呼び出されます。 malloc()/free() を使用した場合、コンストラクタとデストラクタが呼び出されません。 そのため C++ では、malloc()/free() を基本的に利用しません。
メモリの確保と解放
int *p = new int(30); // 確保と初期化 *p += 20; cout << *p << endl; delete p; // 解放
配列の確保と解放
int *p = new int[10]; // 確保 p[0] = 30; cout << p[0] << endl; delete [] p; // 解放
アロー演算子
ポインタで インスタンスをポインタで操作する場合、メンバ変数やメンバ関数のアクセスには、アロー演算子(->)を利用します。
#include <iostream> using namespace std; class Foo { public: int m_i; Foo (int i) m_i(i): { } ~Foo () {} void show () { cout << m_i << endl; } }; int main (int argc, char *argv[]) { Foo *p = Foo(3); p->m_i += 20; p->show (); return 0; }