클래스의 객체를 벡터 안에 동적으로 할당하면 clear()를 사용하면 각 객체의 소멸자가 호출됩니까?C++ - 벡터가 객체를 보유 할 때 소멸자가 호출됩니까?
2
A
답변
1
예, 모두 올바르게 정리됩니다. 0
의 크기의 컨테이너를 떠나, 자신의 소멸자가 호출 된 후, 그들은 벡터 컨테이너에서 제거됩니다this link에서 :
벡터의 모든 요소는 삭제됩니다
a.clear()
모든 ELEM을 파괴 :곧 표준의
[sequence.reqmts]
섹션이 명확하게a
에있는 요소는a
의 요소를 참조하는 모든 참조, 포인터 및 반복기를 무효화하고 과거의 이터레이터를 무효화 할 수 있습니다.
5
정확히 "동적으로 할당 하시겠습니까?" vector<foo>
을 사용하면 괜찮습니다. vector<foo*>
을 통해 포인터를 넣는다면 포인터는 소멸자 그 자체를 갖지 않기 때문에 소멸자가 호출되지 않습니다.
참고 그러나 vector<foo>
경우에, 당신은 찾을 수 귀하의 생성자와 소멸자는 예를 들어, 예상 한 것보다 더 많은라고 벡터가 크기가 조정되면 벡터는 필요할 때 메모리에서 객체를 이동할 때 벡터를 사용하기 때문입니다. 참조 카운트 부기에 의한 작은 반환 한 비용이 있지만 당신은 그 주위에 얻을 수있는 부스트 shared_ptr
를 사용할 수 있습니다.
내 조언 : 객체가 복사 및 파괴가 저렴하면 vector<foo>
을, 비싸거나 하드/불가능한 경우 vector<shared_ptr<foo> >
을 사용하십시오. 벡터가 메모리 관리를 처리하지 않도록 특별히주의하지 않는 한 vector<foo*>
을 사용하지 마십시오. IMHO는 거의 좋은 아이디어가 아닙니다.
관련 문제
- 1. 창이 닫히면 내 소멸자가 호출됩니까?
- 2. SIGINT 또는 SIGSTP가 발행되면 소멸자가 호출됩니까?
- 3. C++에서 pThread를 삭제하면 스택에있는 객체의 소멸자가 호출됩니까?
- 4. "대행자"를 보유 할 때
- 5. exit()를 호출 할 때 소멸자가 실행됩니까?
- 6. 소멸자가 프로그램 종료시 호출
- 7. object-objective-object에 객체를 보유
- 8. PHP의 소멸자가 예측 가능합니까?
- 9. 영속 저장소에서 영속 객체를 가져올 때 프로세스가 어떻게 호출됩니까?
- 10. nsarray는 얼마나 많은 객체를 보유 할 수 있습니까?
- 11. 할당 할 때 객체를 할당 할 때
- 12. C++ : 왜 소멸자가 호출 되었습니까?
- 13. C++ 벡터가 특정 항목을 제거했지만 세그 폴트가
- 14. WCF 서비스에서 소멸자가 호출되는시기
- 15. 제네릭 형식의 인스턴스 보유 - C++
- 16. 벡터가 다른 벡터가 아닌 것을 어떻게 알 수 있습니까?
- 17. C++ (Windows) 벡터가 어떻게 메모리를 잘못 처리합니까?
- 18. 클래스를 보유 할 벡터를 만들려고합니다.
- 19. 어떤 상황에서 C++ 소멸자가 호출되지 않을까요?
- 20. C# -이 기술은 어떻게 호출됩니까?
- 21. c 배열에 다른 배열을 보유 할 수있는 방법이 있습니까?
- 22. 보유 속성에 할당 할 때 왜 공개하지 말아야합니까?
- 23. 권한 개체 보유
- 24. NIB에서 인스턴스화 할 때 UIView의 어떤 메소드가 호출됩니까?
- 25. 응용 프로그램을 종료 할 때 -dealloc 메서드가 호출됩니까?
- 26. 언제 소멸자가 가상이어야합니까?
- 27. Objective-C 객체를 반환 할 때 메모리 관리
- 28. POD의 기본 소멸자가 정적입니까?
- 29. C#에서 1 백만 + 자리를 보유 할 데이터 유형이 필요합니다.
- 30. JFrame 크기를 조정할 때 어떤 메소드가 호출됩니까?
당신이 컨테이너에 객체를 이동을 사용하는 경우; 컨테이너의 객체는 유지되지만 파손해서는 안됩니다. 그러면 어떻게됩니까? – this
원래 답은 std :: move()가 일반적으로 사용되기 전에 작성되었습니다. 그 물체는 여전히 파괴 될 것입니다. 이것은 실제로 일반, IIRC의 경우입니다 - 객체가 그들이 "부터 이동"과 소멸자가 적절히 동작하도록했습니다 시점을 추적 할 것으로 예상된다. 유일한 까다로운 부분은 아무도보고되어 있지 않은지있는 이동-에서 요소의 상태가 새 값을 할당되거나 파괴 될 때까지. –