放置新的奇怪行为[重复]

Posted

技术标签:

【中文标题】放置新的奇怪行为[重复]【英文标题】: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

谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于放置新的奇怪行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的 UIStoryBoard 行为

Coffeescript奇怪的行为[重复]

C# ref 奇怪的行为[重复]

DataFrame复制的奇怪行为[重复]

split String方法的奇怪行为[重复]

UNION 语句相同的选定值 - 奇怪的行为 [重复]