gpt4 book ai didi

c++ - 在使用 operator= 赋值之前需要调用 std::vector.clear() 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:58 24 4
gpt4 key购买 nike

我最近第一次使用 Visual Leak Detector 分析了我的代码,它表明 vector 中存在泄漏,这是我没有预料到的。代码是这样的:

void func()
{
std::vector<MsgUnit> msgVec;

do
{
// msgVec.clear(); // do I need to do this to avoid a leak?
msgVec = m_obj->returnMsgUnitVector();
}
while (someConditionNotMet);

// process msgVec

return;
}

MsgUnit 有一个复制构造函数和析构函数。

我还没有时间进行深入测试,但快速修复似乎表明取消注释 clear() 方法可以消除泄漏。

我想知道标准对这种行为有何看法。我是否需要在分配 vector 之前清除 vector 以避免泄漏?

最佳答案

不,赋值将使目标 vector 值等同于源 vector 。它会在内部做它需要的事情来确保这一点而不会泄漏。 [假设您的类型的复制构造函数、赋值函数和析构函数没有泄漏]

关于c++ - 在使用 operator= 赋值之前需要调用 std::vector.clear() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com