[英]How do I correct returning a local or temporary in this template code?
我將一個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());
沒有代碼。 但是猜測是因為destination_container容器是本地容器,而back_inserter保留了對該容器的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.