deleteはちゃんとしてる。memo:関数ポインタ
http://d.hatena.ne.jp/cast_everything/20090929/1254221575
の続きです。
よくわかってなかったっす。
#include <iostream> #include <string> using namespace std; class SStudent { public: string Name; int Age; void Disp(); }; void SStudent::Disp() { cout<<"名前:"<<Name<<endl; cout<<"年齢:"<<Age<<endl; } int main() { //関数ポインタ void (SStudent::*fOp)() = &SStudent::Disp; // 戻り値 (クラス名::ポインタ名)(引数) = &クラス名::関数; SStudent students[] = { {"name1",33,}, {"name2",33,}, {"name3",33,}, }; (students[1].*fOp)(); (&students[1]->*fOp)(); SStudent* pobj = new SStudent(); pobj->Age = 10;pobj->Name = "newでつくった。"; (pobj->*fOp)(); delete pobj;//pobjの先が保証がなくなる //(pobj->*fOp)();//大変なことになる感じなのでOK。 pobj=NULL; //intだとキモイ。 int* p = new int(); *p = 123; cout << *p << endl; delete p;//コンパイラでpの値は保証しなくなる。 cout << *p << endl;//一応変な値にはなるのでOK *p = 124;//だがそのあとこの行が通る。 cout << *p << endl;//出力もできる、と。 while(true){} }
deleteするとアドレスに格納してある値が保証しなくなるってことらしい。
おk。おk。おやおや恥ずかしい。