다음 버그가 발생했습니다.벡터 관련 메모리 할당 질문
- 나는 종류가
Foo
입니다. 이 클래스의 인스턴스는 std :: vectorvec
의class B
에 저장됩니다. - Foo 클래스에서
new
을 사용하여 메모리를 할당하고~Foo()
에서 해당 객체를 삭제하여 클래스 A의 인스턴스를 만듭니다.
코드가 컴파일되지만 런타임에 오류가 발생합니다. Foo
의 디스트 리뷰 터에서 delete my_a
을 비활성화하면 어떻게됩니까? 코드는 잘 실행되지만 (메모리 누수가 발생할 것입니다).
누군가 여기서 잘못된 점을 설명하고 문제를 제안 할 수 있습니까?
감사합니다.
class A{
public:
A(int val);
~A(){};
int val_a;
};
A::A(int val){
val_a = val;
};
class Foo {
public:
Foo();
~Foo();
void createA();
A* my_a;
};
Foo::Foo(){
createA();
};
void Foo::createA(){
my_a = new A(20);
};
Foo::~Foo(){
delete my_a;
};
class B {
public:
vector<Foo> vec;
void createFoo();
B(){};
~B(){};
};
void B::createFoo(){
vec.push_back(Foo());
};
int main(){
B b;
int i =0;
for (i = 0; i < 5; i ++){
std::cout<<"\n creating Foo";
b.createFoo();
std::cout<<"\n Foo created";
}
std::cout<<"\nDone with Foo creation";
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
감사합니다. 그렇다면 클래스 A의 인스턴스를 어떻게 작성해야합니까? 코드 스 니펫 (snippet)을 많이 주시면 감사하겠습니다. 또한 생성자와 대입 연산자 코드를 어떻게 복사 할 것인가. 대단히 고마워요 – memC
Neil 당신은 오타가 있습니다 ... new A (f.my_a); -> 새로운 A (* f.my_a); – TimW
안녕 Neil, 코드 스 니펫을 주셔서 대단히 감사드립니다. 사실, 벡터에 Foo 인스턴스를 두는 동안 my_a에 int val을 전달하려고합니다. 어떻게해야합니까? -> 나는 다음과 같이하고 싶다 : (물론 작동하지 않는다)'vec.push_back (Foo() : my_a (40)' – memC