释放 C++ 中指针成员的动态内存
release dynamic memory for pointer member in c++
我有一个类:
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++;
}
}
我知道由于class B
构造函数中的new A()
,我正面临内存泄漏问题。所以我试图在每次while
循环后获得帮助来释放内存,这意味着回收vec_b
已经占用的所有内存和向量中 B 类的所有对象,最重要的是释放 A 类对象占用的内存。谢谢!
这似乎是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>();
}
在
类 b 的析构函数中写入删除
B::~B
{
delete member_a;
}
从您在示例中使用类 A 实例的方式来看,在我看来,您实际上根本不需要指向 A 的指针。
- 如果(且仅当)您打算创建类 A 的子类,则应为成员使用
std::unique_ptr
而不是原始指针。 - 如果您不打算对类 A 进行子类化,那么最好的选择就是简单地在类 B 中创建 A 的实体实例。
喜欢这个:
class B {
public:
B();
A member_a;
};
在 B 类中拥有一个可靠的 A 实例可以避免很多内存管理麻烦。
相关文章:
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么