클래스 번호 1에 대한 포인터 때문에 의심되지만 실제로는 메모리 클래스 번호 2에 있습니다. 실제로 소멸자가 있는 경우에는 이것이 중요하기 때문에 갑자기 여기에 문제가 있을 수 있다고 생각했습니다. 그런 상황에서 메모리에 표시가 있는 경우(예: null 종결자가 있는 char) 또는 이와 유사한 경우에만 올바른 메모리 해제가 발생할 수 있다고 생각합니다. 그래서 메모리 할당 방법에 대해 질문했습니다.
220Volt : 클래스 번호 1에 대한 포인터 때문에 의심되지만 실제로는 메모리 클래스 번호 2에 있습니다. 실제로 소멸자가 있는 경우에는 이것이 중요하기 때문에 갑자기 여기에 문제가 있을 수 있다고 생각했습니다. 그런 상황에서 메모리에 표시가 있는 경우(예: null 종결자가 있는 char) 또는 이와 유사한 경우에만 올바른 메모리 해제가 발생할 수 있다고 생각합니다. 그래서 메모리 할당 방법에 대해 질문했습니다.
당신의 의심은 생성자를 등록하지 않았다는 사실에서 비롯됩니다(이 경우에 무슨 일이 일어나는지 이해하려면 이것이 중요합니다). 이 예제를 실행하면 모든 것을 이해할 수 있습니다.
MQL5의 소멸자는 항상 가상입니다. 모든 것이 올바르게 삭제되었습니다. Print(__ FUNCSIG __)를 내려놓으십시오. 소멸자에서.
VC++로 했는데 메모리 해제 메커니즘이 같은 것 같아요?
그러나 귀하의 예는 올바르게 작동합니다. 왜냐하면. 기본 클래스의 가상 소멸자를 지정할 수 있습니다.
아이디어를 조금 다르게 표현하려고 합니다.
주어진:
행위:
추신: 그림은 메모리 모델을 보여줍니다)![](https://c.mql5.com/3/7/xnajoemxmx.png)
클래스 번호 1에 대한 포인터 때문에 의심되지만 실제로는 메모리 클래스 번호 2에 있습니다. 실제로 소멸자가 있는 경우에는 이것이 중요하기 때문에 갑자기 여기에 문제가 있을 수 있다고 생각했습니다. 그런 상황에서 메모리에 표시가 있는 경우(예: null 종결자가 있는 char) 또는 이와 유사한 경우에만 올바른 메모리 해제가 발생할 수 있다고 생각합니다. 그래서 메모리 할당 방법에 대해 질문했습니다.
당신의 의심은 생성자를 등록하지 않았다는 사실에서 비롯됩니다(이 경우에 무슨 일이 일어나는지 이해하려면 이것이 중요합니다). 이 예제를 실행하면 모든 것을 이해할 수 있습니다.
삭제와 같은 위협 구성 자체는 단계적으로 발생하며 이 모든 정보가 저장되고(가상 포인터 자체, 클래스가 기본 및 하위 항목의 합성으로 구성되었음을 기억하십시오) 삭제할 때 소멸자가 반대로 호출됩니다. 나중에서 더 이른 순서로.
그것은 소멸자에 관한 것이 아니며, 중요한 것이 아니며, 클래스 자체에 관한 것입니다. 더 많은 바이트가 필요합니다. 200바이트를 할당한 다음 포인터가 가리키는 메모리를 해제하라고 말합니다. 포인터는 100바이트의 개체를 나타냅니다.
예, 메모리 풀은 삭제 호출로 조각이 해제되는 기간을 알고 있습니다.
이 정보가 저장되는 위치는 풀 구현에 따라 다릅니다.
예를 들어, C++에서 new를 통해 할당되지 않은 개체에 대한 포인터를 제공하면 응용 프로그램이 어떻게 충돌하는지 알 수 있습니다.
그것은 소멸자에 관한 것이 아니며, 중요한 것이 아니며, 클래스 자체에 관한 것입니다. 더 많은 바이트가 필요합니다. 200바이트를 할당한 다음 포인터가 가리키는 메모리를 해제하라고 말합니다. 포인터는 100바이트의 개체를 나타냅니다.
내가 이해하는 한 귀하의 질문은 메모리 풀의 기능과 관련이 있습니다.
예, 메모리 풀은 삭제 호출로 조각이 해제되는 기간을 알고 있습니다.
이 정보가 저장되는 위치는 풀 구현에 따라 다릅니다.
예를 들어, C++에서 new를 통해 할당되지 않은 개체에 대한 포인터를 제공하면 응용 프로그램이 어떻게 충돌하는지 알 수 있습니다.