-4

c++ で次の動作を理解できません。gcc 4.4.1 を使用しています。

#include<iostream>
using namespace std;

class call{
        private:
        int *ptr;

    public :
    call()
    {
    cout<<"\nConstructor called\n";
    }

    void allocate()
    {
            ptr=new int[10];
    }

    void test()
    {
            cout<<"\nTesting\n";
    }

    ~call()
     {
            if(ptr)
            {

             cout<<"\nptr deleted\n";
             delete [] ptr;
                     ptr=NULL;
            }
      }
};





int main()
{
    call *p=new call();
    p->allocate();
    p->test();

    delete p;

    p->test();
    p->test();

    p->allocate();

    p->test();
    p->test();

return 0;
}

出力:

Constructor called

Testing

ptr deleted

Testing

Testing

Testing

Testing


上記のコードでは、オブジェクト (delete p) を削除した後でも、クラスのメンバー関数 (void test()) にアクセスできます。そのオブジェクトが削除された場合に、C++ がクラスのメンバー関数にアクセスできるようにする方法。

4

3 に答える 3

1

あなたが次のことをした後

delete p;

p を NULL に設定していない

以下を試してください

void test()
{
    cout<<"Testing "<< ptr[0] << "\n";
}

void allocate()
{
     ptr=new int[10];
     ptr[0] = 10;
}
于 2013-06-20T18:31:45.047 に答える