1

静的関数内に動的メモリを割り当てるとどうなるか知りたいですか? 静的関数を呼び出すたびに同じメモリが返されるか、新しいメモリが作成されるたびに??

例えば-

    class sample
    {
            private:
            static int *p;
            public:
            static int* allocate_memory()
            {
                    p = new int();
                    return p;
            }
    };

    int* sample::p=NULL;

    int main()
    {
            int *p= sample::allocate_memory();
            int *q = sample::allocate_memory();
            cout << p << "   " << q << endl;
            if (p== q)
                    cout << "we are equal";
    }

このプログラムでは、main() 内の両方のメモリ位置が異なります。static int *p; を移動すると、static int *p = new int; のように、 allocate_memory() 関数内。両方のメモリの場所は同じになります。

何が違うのか理解したい。static は常に static であり、クラス内または関数内にある場合、なぜ動作が異なるのですか??

デベシュ

4

2 に答える 2

0

allocate_memory を呼び出すたびに、新しい int が作成されます。p は静的ですが、それが指すものは変わります。

毎回同じオブジェクトへのポインタを返すには:

static int* allocate_memory()
{
   if(!p)
   {
       p = new int();
    }
    return p;
}

main メソッドでは、p と q は 2 つの異なるポインターであるため、allocate_memory の動作に関係なく異なります。p と q を逆参照すると、それらが何を指しているかを比較できます。

if(*p == *q) 
{
    cout << "Equal";
}
于 2013-10-30T13:55:25.050 に答える