放置新事物的奇怪行为

strange behavior of placement new

本文关键字:新事物      更新时间:2023-10-16
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

但是我将运算符 new 的代码更改为

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

它不会崩溃,其输出为:

0x25c4010
0x25c4410
10
100

我正在使用 ubuntu13.10 和 gcc4.8.1

谢谢

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