주로 C++에서 몇 가지 메모리 문제에 대한 이해를 돕기 위해 포인터가 포함 된 컨테이너를 사용합니다.컨테이너 멤버의 메모리 해제
header.h가
#include <iostream>
#include "Header.h"
int main(int argc, const char * argv[])
{
ClassA objA(5);
ClassB objB;
return 0;
}
ClassA::ClassA(int n) {
intPtr = new int[n];
}
ClassA::~ClassA() {
delete intPtr;
}
ClassB::ClassB() {
vecPtr = vector<ClassA*>(0);
}
ClassB::~ClassB() {
//no destructor needed
}
void ClassB::someFunc() {
//vecPtr = something using new;
int* testPtr = new int[vecPtr.size()];
//do stuff
delete testPtr;
}
이 vecPtr
이제까지 삭제해야합니까
#ifndef test_Header_h
#define test_Header_h
#include <vector>
using std::vector;
class ClassA {
int* intPtr;
public:
ClassA(int n);
~ClassA();
};
class ClassB {
vector<ClassA*> vecPtr;
public:
ClassB();
~ClassB();
void someFunc();
};
#endif
MAIN.CPP : 나는 이런 식으로 뭔가를 말? 아니면 소멸자 ClassA
이 나를 위해이 일을 완수합니까? 또한 vector
대신에 list
포인터 나 pair
을 사용하면 동일한 상황이 발생합니까? 마지막으로, 설명을 위해 testPtr
은 someFunc
에서 삭제되어야합니다. 왜냐하면 그것이 선언 된 범위이기 때문에 소멸자에 넣는 것은 의미가 없습니다. testPtr
이 중요한 회원의 주소와 주소를 공유했다면 삭제하는 것이 중요한 회원입니까? 나는 몇 가지 질문이 있다는 것을 알고 있지만, 나는 내 머리 속에서 순환 논쟁으로 돌아가고 있다고 생각한다. 점점 혼란스러워진다.
intPtr에'new int [n];을 (를) 할당 했으므로 delete []로 할당을 해제해야합니다. [문서] (http://www.cplusplus.com/reference/new/operator%20delete [] /)를 참조하십시오. – user2079303
usecase 추측 : 모든 vecPtr 요소를 명시 적으로 '삭제'해야하며 대상 벡터에서 사용할 포인터의 내용을 복사하는 복사 생성자/할당을 제공해야합니다. – qwm
'new'로 생성 한 것을'삭제 '해야합니다. –