벡터 멤버 변수가 들어있는 클래스가 있습니다. 스택에 저장된 벡터는 (즉, 메모리 free'd)이 범위를 벗어날 때 정리되지만 벡터 멤버 변수가 포함 된 클래스 개체가 삭제되는지는 확실하지 않습니다. - 은 범위를 벗어나는 것으로 간주됩니다.C++ 소멸자에서 벡터 클래스 멤버 메모리 삭제
그렇지 않으면 벡터를 파괴하는 적절한 방법은 무엇입니까?
EG :
class fred {
char *stuff;
vector<int> v;
fred() : stuff(), v() {}
~fred() {
if (stuff) free(stuff);
// now how do I clear up the vector v? Will it be done automatically?
}
}
태그가 어떻게 C++로되어 있는지보고 싶다면'malloc/free'를 통해'new/delete '를 원할 수도 있습니다. – chris
벡터가 좋습니다. 그러나'stuff '는 복사 생성자와 대입 연산자 때문에 (컴파일러가 자동으로 생성하기 때문에) 안전하지 않습니다. 3의 규칙 (또는 C++ 11의 5)을 참조하십시오. –
새로운 세상에서, C++ 11-land, 더 이상 당신 자신을'delete'라고 부르지 않습니다. 당신은 unique_ptrs (보통) 또는 shared_ptrs (드물게)를 사용하여 그것을 호출합니다. – David