我有一个班级:
class A {
A();
////////something about the class A
};
然后我有另一个班:
class B {
public:
B();
A* member_a;
};
B::B()
{
this->member_a = new A();
}
我想做的是这样的:
main()
{
vector<B> vec_b;
int num=1;
while(some_condition)
{
for (int i=0; i<num; i++)
{
vec_b.pushback(B());
}
////////do something about vec_b;
num++;
}
}
我知道由于new A()
的构造函数中的class B
,我遇到了内存泄漏问题。所以我试图在每个while
循环之后获得释放内存的帮助,这意味着回收vec_b
所占用的所有内存以及向量中B类的所有对象,最重要的是释放由A类对象占用的内存。
非常感谢你!
答案 0 :(得分:0)
这似乎应该是B
的析构函数
B::~B()
{
delete member_a;
}
如果您可以访问C ++ 11或更高版本,我更希望std::unique_ptr
,因此您可以免费获得此取消分配
class B {
public:
B();
std::unique_ptr<A> member_a;
};
B::B()
{
member_a = std::make_unique<A>();
}
答案 1 :(得分:0)
在b类的析构函数中写下删除
B::~B
{
delete member_a;
}
答案 2 :(得分:0)
从您在示例中使用A类实例的方式来看,在我看来,您根本不需要指向A的指针。
std::unique_ptr
作为成员而不是原始指针。 class B {
public:
B();
A member_a;
};
在B类中拥有一个坚实的A实例可以避免内存管理方面的麻烦。