Delphi에서 만든 일부 프로젝트를 번역하려고합니다. 객체로 일반적으로 선언 할 수 있습니다 : C에 대한스택 및 힙의 C++ 객체 수명
//I have the control of the object and I MUST delete it when it's not needed anymore
male := THuman.Create();
try
// code
finally
male.Free; (get rid of the object)
end;
읽기 스트로브 스트 룹의 책 ++ 나는 항상 해결 방법이 있기 때문에 (짧은) 자신의 언어가 finally
블록을 필요로하지 않는다는 것을 이해했다. 블록 {... code ...}
이
THuman* male = new THuman
나는 개체의 수명을 제어 할 수 있습니다 종료 될 때 개체가 다음 생성되는
THuman male;
범위를 벗어나 : 나는 클래스를 만들려면 지금은 두 가지 방법이 그리고이 책은 첫 번째 방법을 사용하여 제안하는delete
(경우에도 로봇과 그것을 파괴 h는 괜찮습니다.)하지만 델파이 배경에서 왔고 두 번째 방법을 사용하고 싶습니다 (객체의 제어권을가집니다).
질문 C++에서 객체에 대해 가지고있는 두 가지 메소드의 차이점을 이해할 수 없으며, 온라인으로 읽기가 더 혼란 스럽습니다. 방법 1이 스택에 메모리를 할당하고 힙에서 방법 2를 할당한다고 말하면 정확합니까?
NULL
값을 객체에 할당하면 방법 2 (우리는 힙에 있음)에서 삭제를 호출해야합니까?
예를 들어 델파이는 힙에서만 인스턴스를 만들 수 있으며 Free
은 개체를 삭제합니다 (C++에서는 delete
).
https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization –
[C++ 객체의 수명주기 란 무엇입니까?] (http://stackoverflow.com/questions/17121305/what-is-the- – Borgleader
가능한 한 포인터 및 동적 할당을 사용하지 마십시오. 당신이 그들을 잘 이해하지 못한다면 그들은 문제와 이상한 행동으로 이끌 것입니다. 자동 저장 ("스택"에 대한 로컬 변수)은 안전하며 현재 (또는 중첩 된) 블록 내에서만 변수가 필요하면 잘 작동합니다. 현대 C++에서는 다형성을 제외하고는 포인터에 대한 필요성이 거의 없습니다. –