次の簡単なコードにメモリリークがあるかどうかを確認したいと思います。この関数では、ポインターを削除し、このポインターに新しいオブジェクトを割り当てます。これは合法ですか?g ++コンパイラでは、テストポインタを削除しても、そのメンバーにアクセスできます。これは私には奇妙に見えます。
class cTest{
public:
cTest(double _m){
m=_m;
}
~cTest(){}
double m;
};
void function (cTest * test){
delete test;
std::cout<<test->m<<std::endl;
test= new cTest(1.2);
}
int main(){
cTest *t = new cTest(0.1);
std::cout<<t->m<<std::endl;
function (t);
std::cout<<t->m<<std::endl;
delete t;
return 0;
}
印刷します
0.1
0.1
1.2