![]() |
![]() |
TOP > C++ > delete演算子 |
![]() |
![]() |
delete演算子
C++には、動的確保の演算子としてdelete演算子が用意されている。
delete演算子は、メモリの開放とデストラクタの呼び出し(後処理)を行う。
Cの関数freeはメモリの開放はできるが、デストラクタの呼び出しは行われない。newと同じ
(書式) delete pointer;
deleteの例
#include <iostream> using namespace std; int main(int argc, char* argv[]) { /// 動的確保を行う int *test = new int; /// メモリの開放 delete test; return(0); } 配列の開放
new演算子で、配列を確保した際には、以下の書式で開放を行う。
[]を抜くと、デストラクタが正しく数分起動しないので注意。
(書式) delete[] pointer
deleteと継承
余談であるが、クラスを継承しオブジェクトを基底クラスとする際には、必ず基底クラスのデストラクタをvirtualにする。
基底クラスのデストラクタをvirtualにしないと、オブジェクト開放時に派生クラスのデストラクタが呼ばれない。
new使い方の例
#include <iostream> using namespace std; class CParent { public: CParent() { cout << "Parent Constructor" << endl; } /// virtualにしてない /// すると、CChildのデストラクタが呼ばれない ~CParent() { cout << "Parent Destructor" << endl; } virtual void func() { cout << "Parent Func" << endl; } }; class CChild : public CParent{ public: CChild() { cout << "Child Constructor" << endl; } ~CChild() { cout << "Child Destructor" << endl; } void func() { cout << "Child Func" << endl; } }; int main(int argc, char *argv[]) { CParent *p = new CChild(); //CChild *p = new CChild(); delete p; return(0); } |
![]() |
![]() |
Copyright 2007 ためになるホームページ All Rights Reserved. |