gpt4 book ai didi

c++ - 当对象被分配给一个新对象时,对象会调用它们的析构函数吗?

转载 作者:行者123 更新时间:2023-11-28 02:44:47 25 4
gpt4 key购买 nike

具体拿这段代码

function myfunction(){
vector<T> foo,bar;
//..put some objects into foo via push_back
for(int i =0;i<foo.size;i++)
if(foo[i].hasCondition())
bar.push_back(foo[i]);
foo = vector<T>();
//do other stuff
}

那么 foo 或 bar 不包含的对象是否不再被破坏?如果不是,只破坏 foo 中没有被 bar 指向的对象的正确方法是什么?

最佳答案

您的用例的正确算法是copy_if:

#include <algorithm>    // for copy_if
#include <functional> // for mem_fn
#include <iterator> // for make_move_iterator and back_inserter

auto it = std::make_move_iterator(foo.begin());
auto e = std::make_move_iterator(foo.end());

std::copy_if(it, e, std::back_inserter(bar), std::mem_fn(&T::hasCondition));

foo.clear(); // destroy what's left of them

(将迭代器包装在 make_move_iterator 中允许您有效地移动元素,而不是制作拷贝并立即销毁原件。将其视为不存在的 move_if 算法。)

关于c++ - 当对象被分配给一个新对象时,对象会调用它们的析构函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791354/

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