1

重複の可能性:
NULL オブジェクト ポインターでメンバー関数を呼び出すとどうなりますか?

#include <iostream>
#include <string>

using namespace std;

class myClass{
private:
        int *x, *y, *z;

public:
        myClass();
    ~myClass();
    void display();
    void math(int,int,int);
};


void myClass::math(int x,int y,int z){
    this->x = new int;
    this->y = new int;
    this->z = new int;

    *this->x = x;
    *this->y = y;
    *this->z = z;

    cout << "result: " << (x*y)+z << endl;
}

myClass::~myClass(){
    delete x;
    delete y;
    delete z;
}

void myClass::display(){
    cout << x << y << z << endl;
}

myClass::myClass(){
    x=0;
    y=0;
    z=0;
}


int main()
{
    myClass myclass;
    myClass *myptr;
    myptr = new myClass();

        myclass.math(1,1,1);

myptr->math(1,1,1);

delete myptr;

myptr->math(1,1,1);  **//why does this still print?**



int t;
cin >> t;

 }

:::出力:::

結果: 2

結果: 2

結果: 2

私はもっ​​と学ぼうとして C++ をいじっています。削除演算子が正確に何をするかを見たかったのです。オブジェクトを削除した後も「result: 2」という 3 番目の出力が得られるのはなぜですか?

4

2 に答える 2

4

オブジェクト メモリは、まだ何かによって上書きされていない可能性があります。そのようなことをしないでください、それは未定義の動作です

于 2012-11-03T05:34:19.087 に答える