|
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);
}
|