「newとdelete」の版間の差分
提供: C++入門
(→アロー演算子) |
(→関連項目) |
||
行63: | 行63: | ||
* [[C++言語解説]] | * [[C++言語解説]] | ||
* [[C++ライブラリ]] | * [[C++ライブラリ]] | ||
+ | * [[std::outでポインタのアドレスを表示する方法]] | ||
{{smartpointer}} | {{smartpointer}} | ||
<!-- vim: filetype=mediawiki --> | <!-- vim: filetype=mediawiki --> |
2014年7月6日 (日) 21:34時点における版
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 = new Foo(3); p->m_i += 20; p->show (); delete p; return 0; }