클래스의 public 멤버 함수에서 가져온 포인터 또는 포인터를 벡터에 대한 포인터로 반환한다는 의미에 대해 빠른 질문이 있습니다.C++에서 public 멤버 함수에서 포인터의 벡터/맵을 반환하는 중
여기는 클래스 B
vector<A*>* ClassB::getfunction(){
returns m_test;
}
M_TEST 포인터의 벡터에 형 포인터의 클래스 B의 개인 데이터 멤버의 멤버 함수입니다 :
여기 내 코드입니다. 이 객체는 힙에서 초기화되어 클래스 소멸자 (벡터의 모든 요소 포함)에서 삭제해야합니다.
다음과 같이 함수를 사용합니다.
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
내 질문 :
I 메모리가 모두 힙에 할당되어있어 두 객체가 내가 그들 모두를 삭제해야합니다했기 때문에?
주문이 중요하며 다음 사항이 맞습니까?
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
//do something with ex_ptr_vecA
//Then I want to delete the allocate memory to the heap
//delete class B first
delete ex_B;
//and then the vector
//need to loop over vector elements and delete one at a time
for(int i =0; i < ex_ptr_vecA; i++){
delete ex_ptr_vecA->at(i);
}
delete ex_ptr_vecA;
B 클래스의 소멸자가 이미 힙 메모리 할당을 취소했기 때문에 포인터가 잘못되었거나 삭제하려고합니까? 내가 선을
ex_ptr_vecA = ex_B->getfunction();
컴파일 생각하지 않지만
아 죄송합니다. 함수에서 포인터의 벡터에 대한 포인터를 반환해야합니다. 이것은 여전히 나에게 같은 결과를 줄 것입니까? – MWright
@MWright : 예, 그렇습니다. m_test가 B에 속하면 (읽기 : B의 멤버 임) B 만 B를 삭제해야합니다. scoped_ptr 및 참조를 사용하여이를 명확하게 만들 수 있습니다. – thiton
그러면 ex_B를 삭제하면됩니까? 위의 코드에 대한 해결책을 제시해 주시겠습니까? – MWright