0

我将 copy_if 绑定到将接受一对迭代器的函数对象中。我有一个警告,我要返回本地地址或临时地址。

据我所知,它来自于 std::pair 迭代器的绑定成员变量,但我不知道如何纠正它。我不明白为什么他们首先被认为是临时的。有人可以向我解释一下吗?

这是相关的代码。环境是 Visual Studio 2010 Ultimate,不太有用的是 Windows 7 Enterprise。

std::vector<My_Type *> destination_container;

typedef /*A boost multi index iterator that dereferences to a 'My_Type *' */ t_range_iterator;
typedef std::pair<t_range_iterator, t_range_iterator> t_equal_range;
typedef std::function<bool(My_Type *)> t_predicate;
typedef std::back_insert_iterator<std::vector<My_Type *>> t_inserter;

t_predicate predicate(std::bind(&My_Type::pred, std::placeholders::_1, SOME_CONST));

std::function<t_inserter(const t_equal_range)> do_copy_from(std::bind(&std::copy_if<t_range_iterator, t_inserter, t_predicate>
    , std::bind(&t_equal_range::first, std::placeholders::_1)
    , std::bind(&t_equal_range::second, std::placeholders::_1)
    , std::back_inserter(destination_container)
    , predicate));

稍后,代码将执行以下操作:

do_copy_from(return_me_an_equal_range_of_My_Type_ptr());
do_copy_from(get_me_another_equal_range());
do_copy_from(and_so_on_dot_dot_dot());
4

1 回答 1

0

没有足够的代码。但猜测是因为destination_container 容器是本地的,而back_inserter 保留了对它的引用。

于 2013-06-06T12:13:29.557 回答