前者の方法では、スコープから抜ければ自動的にクラスのインスタンスも削除される。
しかし「new演算子」を用いて作成したインスタンスは、スコープを抜けても削除されない。
削除したい場合は、「delete演算子」を使用しなければならない。newしたものをdelete
し忘れると、OSによってはプログラムが終了してもメモリーにずっと残ってしまう場合も
あるので、newしたものは必ずdeleteしなければならない。
class TestClass{
public:
TestClass(int n); // コンストラクタ
~TestClass(); // デストラクタ
void print();
protected:
int size;
};
|
#include "TestClass.h"
#include<iostream>
using namespace std;
// コンストラクタ
TestClass::TestClass(int n){
cout << "コンストラクタ" << n;
size = n;
}
// デストラクタ
TestClass::~TestClass(){
cout << "デストラクタ" << size;
}
void TestClass::print(){
cout << "print" << size;
}
|
#include "TestClass.h"
void main(){
TestClass test(10);
test.print(); // 10と表示される
TestClass* pTest = new TestClass(20);
pTest->print(); // 20と表示される
delete pTest;
}
|
コンストラクタ10
print10
コンストラクタ20
print20
デストラクタ20
デストラクタ10
|