ためになるホームページ お問い合わせ




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.