次のバグが発生しています。
- クラスがあり
Foo
ます。このクラスのインスタンスは、のstd::vectorvec
に格納されclass B
ます。 - クラスFooでは、で
new
そのオブジェクトを使用してメモリを割り当てたり削除したりして、クラスAのインスタンスを作成しています~Foo()
。
コードはコンパイルされますが、実行時にクラッシュします。delete my_a
クラスのdesstructorを無効にした場合Foo
。コードは正常に実行されます(ただし、メモリリークが発生します)。
誰かがここで何が悪いのかを説明し、修正を提案してもらえますか?
ありがとう!
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;
}