我遇到了以下的bug。
- 我有一个类
Foo
。该类的实例被存储在class B
的std::vectorvec
中。 - 在类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;
}
new A( f.my_a );
改为new A( *f.my_a );
。 - TimWint val
给my_a
。我该怎么做呢? --> 我想要这样的东西:(当然它不起作用)vec.push_back(Foo():my_a(40)
- memCFoo::Foo(int val):my_a(val)
就可以了。谢谢。 - memCnew A(f.my_a)
应该在 两个 地方改为new A(*f.my_a)
,2)赋值运算符没有处理 自我赋值。 - Alex Budovski