2010-02-18 7 views
3

는 좀 이런 구조체를 말한다 b를 삭제하고 A 유형이 더 작다고 생각합니다. 이것이 메모리 누수의 원인이 될까요?동적 메모리와 C의 상속 구조체 ++

또한 myFunc에서 b와 같은 것을 더 많이 할당하고 싶습니다.하지만 new는 C를 사용하지 않고 b가 A인지 B인지 알지 못합니까? 친구가 typeof sugegsted지만, VC는 이것을 지원하는 것 같지 않습니다.

+0

VC가 너무 대해서 typeof를 지원하지 않습니다 : (자동 메모리 관리 및 좋네요 API와)

std::vector<A*> someAs; 

또는 부스트 해당 :

은 당신이 정말 원하는 것은 아마 기본 클래스에 대한 포인터의 배열입니다(). 어떤 버전을 사용하고 있으며 코드가 어떻게 실패합니까? (당신이 당신의 경우에 그것을 사용할 필요가 없다는 것을 유의하십시오 ...) – Macke

+0

나는 그 배열을 myFunc(), btw ...에서 인덱스하려고하고 싶지 않을 것입니다. – Macke

답변

4

A와 B 모두 POD (일반 오래된 데이터)이므로 내용이 파손될 필요가 없으므로 메모리가 누출되지 않습니다.

여전히 상속 된 것으로 가정되는 (기본) 클래스에 가상 소멸자가 항상있는 것이 좋습니다. A에 가상 소멸자를 추가하면 A*을 통해 삭제해도 파생 클래스의 멤버가 삭제 된 것을 포함하여 적절한 파생 소멸자가 호출됩니다.

virtual ~A() {} 

공지 사항, 그러나, 당신은 기본 유형의 배열에서 상속을 사용할 수 없습니다, 오브젝트의 실제 크기는 다를 수 있습니다 정확하게 있기 때문이다.

boost::ptr_vector<A> someAs; 
관련 문제