주요 기능 코드 :
PNG* allocate(size_t w, size_t h) {
PNG ret(w, h);
return &ret;
}
int main() {
PNG * image = allocate(256, 512);
delete image;
return 0;
}
적절한 PNG 클래스가 정의되어 있다고 가정합니다. 내 질문은 allocate (); 및 & ret. 일반적으로 함수가 호출 된 후 생성 된 모든 인스턴스가 지워집니다 (데이터 만 새로 복사 됨). 이 경우 & ret는 새로 생성 된 ret의 위치를 가리 킵니다. 하지만 함수가 실행되면 ret이 삭제되고 결과적으로 PNG * 이미지가 격렬하게 동작하는 것 같습니다.
이것이 사실입니까? 그렇다면 코드를 수정하는 방법은 무엇입니까?
또한 이미지는 new로 생성되지 않으므로 delete 를 사용하는 것이 합리적 입니까?
귀하의 질문에 문자 그대로 대답하기 위해이 코드를 수정하는 방법은를 호출 delete
한 결과로 제공되지 않은 포인터를 호출 하지 않는 것입니다 new
.
delete
두 가지를 수행합니다.
이 경우에 ret
생성 된 객체 allocate
는 함수가 종료 될 때 자동으로 소멸되므로 소멸자를 호출 할 필요가 없습니다. 이 객체는 또한 런타임에서 제공하는 메모리에 할당되지 않았으므로 해당 메모리를 해제하는 것에 대해 이야기하는 것도 의미가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다