【问题标题】:strange behavior of placement new [duplicate]放置新的奇怪行为[重复]
【发布时间】:2014-03-14 10:29:19
【问题描述】:
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

谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 2015-07-26
      • 2020-04-26
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多