newとdelete
提供: C++入門
スポンサーリンク
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; }
関連項目
- 配列
- boost::array
- C++言語解説
- C++ライブラリ
- std::outでポインタや変数のアドレスを表示する方法
- ポインタ / NULL / nullptr
- スマートポインタ
- std::unique_ptr
- std::shared_ptr
- std::weak_ptr
- std::auto_ptr (非推奨)
- boost::shared_ptr
- boost::scoped_ptr
- boost::weak_ptr
- boost::intrusive_ptr
ツイート
スポンサーリンク