假设我有一个类 Foo 定义如下。 如果我在~Foo()中没有bars.clear(),会导致内存泄漏吗? 我想知道这一点,因为 bars 是一个对象字段(而不是指针字段),所以当调用 ~Foo() 时, std::vector 的析构函数 应该自动调用,所以我想知道 std::vector 的析构函数是否会透明地调用 .clear() 。
class Foo
{
private:
std::vector<Bar*> bars;//object field
...
};
Foo::~Foo
{
//bars.clear();
}
最佳答案
std::vector::clear()
删除std::vector
内的对象并更改其 std::vector::size()
为零。如果您创建 std::vector
,RAII 将负责资源释放过程,但您必须等到超出 vector 范围。如果在超出范围之前,您需要清理 vector ,您可以使用 std::vector::clear()
.
但在您的特殊情况下,您将指向 std::vector
内的对象的指针,因此 RAII 确实删除了指针,但忽略了指向该指针的对象。因此,您必须在超出范围且 RAII 变为事件之前或在调用 std::vector::clear()
之前自行清理指向指针的对象。
关于c++ - 未对 C++ STL 容器对象调用clear() 时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30395178/