簡體   English   中英

如何更正此模板代碼中的本地或臨時值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM