std::queue
은 스레드 안전 큐를 만들기 위해 템플릿 기반 클래스로 래핑됩니다. 이 클래스에는 두 가지 버전이 있습니다. 하나는 값 유형을 저장하는 버전이고 다른 하나는 포인터 유형을 저장하는 버전입니다.C++ std :: queue :: pop()은 소멸자를 호출합니다. 포인터 유형은 무엇입니까?
포인터 유형의 경우 삭제시 대기열 요소를 삭제하는 데 문제가 있습니다. 그 이유는 항목을 안전하게 큐에서 제거하는 방법을 모르기 때문입니다.
This 대기 상태에서 요소를 제거하는 유일한 방법은 pop()
을 호출하는 것입니다 (공백 상태이므로 실제로는 상태가 아닙니다). 참조는 또한 pop()
이 항목에 대한 소멸자를 호출한다고 말합니다.
글쎄, 포인터가 실제로 집계를 가리킬 수도 있고 그렇지 않을 수도 있기 때문에 포인터 유형에 문제가 발생합니다. 그것들 중 하나가 집합체를 가리키면 모두 그렇지만 래퍼가 템플리트 화되어 있기 때문에 어떤 유형 (집합체 또는 집합체가 아닌)을 다루고 있는지 보장 할 수 없습니다.
따라서 pop()
이 소멸자를 호출하면 어떻게됩니까? 어떻게하면 모든 것이 제거되고 메모리 할당 해제가 제대로 이루어 지도록 할 수 있습니까?
마지막으로, 제 솔루션은 ARM9 용 GCC의 이전 버전을 사용하고 있습니다. 나는 이것에 대한 통제권이 없다. 나는 여기에 도움이 될 스마트 포인터와 컨테이너가있는 라이브러리가 있다는 것을 이해하지만, 그들은 나를 위해 출입 제한이 있습니다.
"실제로 포인터가 집계를 가리킬 수도 있고 그렇지 않을 수도 있기 때문에 포인터 유형에 문제가 발생합니다."집계가 여기서 무엇을해야 하는지를 이해하지 못합니다. –