2014-02-14 11 views
0
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 

는하지만 그것은 충돌하지 않는

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

새로운 연산자의 코드를 변경하고 그 출력은 다음과 같습니다

0x25c4010 
0x25c4410 
10 
100 

ubuntu13.10 및 gcc4.8.1

감사

답변

4

짧은 대답을 사용하고 있습니다 : 정의되지 않은 동작은 정의되지 않습니다.