放置新奇怪的行为

时间:2014-02-14 21:34:57

标签: c++

class A
{
    public:
        static void * operator new (size_t,void *p) 
        {                                                           
            return p;
        }
        int i;
};


int main()
{
    void *p = malloc(sizeof(A));
    cout<<p<<endl;
    A *a= new (p) A;
    a->i = 10;
    cout<<a<<endl;
    cout<<a->i<<endl;
    a->i = 100;
    cout<<a->i<<endl;
}

输出:

0x1e0e010
0x1e0e010
10
100

但我将operator new的代码更改为

static void * operator new (size_t,void *p) 
{                                                           
    return p+1024;
}

它不会崩溃,其输出为:

0x25c4010
0x25c4410
10
100

我使用的是ubuntu13.10和gcc4.8.1

由于

1 个答案:

答案 0 :(得分:4)

简短回答:未定义的行为未定义。