2012-02-07 5 views
1

동일한 개체를 가리키는 포인터가 2 개인 경우 포인터 1을 사용하여 포인터를 삭제해도 메모리 및 포인터 2가 null을 가리키거나 개체가 메모리에 남아있게됩니까? 그리고 그것을 무료로 삭제 포인터 2를 사용해야합니까?동일한 개체에 대한 C++ 2 포인터

는 말은 :

int *p1, *p2; 
p1=new int; 
p2=p1; 
*p1=5; 
p2=p1; 
delete p1; 

int x=*p2; 
//Error or x=5? 
+0

'p2'에 아무 것도 지정하지 않습니다. – sth

+0

예에서 p2에 값을주지 않으므로 p1과 같지 않습니다! 그것 이외에, 궤도에있는 경 명성 인종은에 반점이다. 오,하지만 코드의 질문에 대해서는 오류가 발생하거나 오류가 발생하지 않을 수 있습니다. UB 야. –

+0

@ Mr Resister : 습관입니다.) –

답변

8
  • 목적은 사라 될 것입니다.
  • 포인터 2는 null 포인터가 아니지만 이전에는되었지만 현재 값이 잘못된 포인터가 붙어있는 포인터입니다. 그것으로 무엇이든하는 것은 오류가 될 것입니다.
  • 포인터 1에서도 마찬가지입니다. 둘 사이에는 차이가 없습니다.

1 - 음, UB 아닌 "오류"자체. 그러나 그것을하지 마십시오.

+0

고맙습니다. 내가 알고 싶은 바로는 :) –

1

두 메모리 포인터가 동일한 메모리를 가리키는 것이 일반적으로 좋지 않습니다. 하나를 삭제하면 다른 하나는 매달린 포인터가되기 때문입니다.

삭제 후 메모리로 수행하는 작업은 모두 입니다. 정의되지 않은 동작입니다.

가 가리키고 있기 때문에 을 잊어 버린 것으로 생각합니다. 질문에서와 같이 int x=*p2;은 정의되지 않았습니다.

+0

메모리는 아직 있지만 오브젝트는 없습니다. –

+0

@LightnessRacesinOrbit 나는 그가 내 주장을 알고 있기를 바란다. 분명히 당신의 RAM이 아무데도 가지 않을 것입니다. –

+0

나는 그 곳에서 빔이 날 수 있다고 가정합니다. –

관련 문제