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
由于
答案 0 :(得分:4)
简短回答:未定义的行为未定义。