삭제 vs 삭제 []
제가 C ++를 배웠을 때 이것은 오래 전 일입니다. 나는 절대 사용하지 말라고 delete
들었지만 단일 객체에서 delete[]
수행 delete[]
하는 것은 delete
. 선생님을 너무 많이 믿지 않는다는 것을 알면서도 이것이 사실입니까?
delete
대신 전화 할 이유가 delete[]
있습니까?
SO에서 관련 질문을 스캔했지만 명확한 답을 찾지 못했습니다.
표준 (5.3.5 / 2)에서 :
첫 번째 대안 (객체 삭제)에서 삭제 피연산자의 값은 배열이 아닌 객체에 대한 포인터 또는 그러한 객체의 기본 클래스를 나타내는 하위 객체 (1.8)에 대한 포인터 (10 절)입니다. 그렇지 않으면 동작이 정의되지 않습니다.
두 번째 대안 (배열 삭제)에서 삭제 피연산자의 값은 이전 배열 new-expression의 결과 인 포인터 값이어야합니다. 그렇지 않으면 동작이 정의되지 않습니다.
그래서 아니오 : 그들은 결코 동등하지 않습니다!
delete []
은 "벡터 삭제"이며 벡터 new에 해당합니다 new[]
.
일치하는 할당 자 쌍을 사용해야합니다. 예를 들면 malloc/free
, new/delete
, new[]/delete[]
, 다른 사람은 정의되지 않은 동작을 얻을.
아니! 로 delete[]
할당 할 때 호출 new[]
하고 그렇지 않으면 호출 delete
합니다.
교사가 말한 내용은 정의되지 않은 동작으로 이어지며 운이 좋으면 응용 프로그램 충돌이 발생합니다.
delete
단일 객체 delete[]
를 삭제하는 데 사용되며 객체 배열을 삭제하는 데 사용됩니다. 자세한 내용은 이 링크 를 확인하십시오 .
참고 URL : https://stackoverflow.com/questions/4255598/delete-vs-delete
'Programing' 카테고리의 다른 글
Laravel orderBy 관계에 (0) | 2020.08.26 |
---|---|
Windows 10에서 명령 프롬프트가 멈추는 이유는 무엇입니까? (0) | 2020.08.26 |
RestSharp에서 요청 본문에 텍스트를 추가하는 방법 (0) | 2020.08.26 |
Bootstrap에서 ScrollSpy의 오프셋을 어떻게 설정합니까? (0) | 2020.08.26 |
.NET에서 Microsoft.Office.Interop.Excel을 사용하려면 어떤 참조가 필요합니까? (0) | 2020.08.26 |