[英]How can I use std::sort with objects that have no copy constructor?
[英]How I can be ensure that copy constructor will never be called if I use std::move
請參閱下面的代碼。 我評論了移動構造函數,而不是編譯錯誤,現在調用了復制構造函數! 盡管我使用的是std::move
。
如果我使用std::move
,我如何確保我巨大的 object 永遠不會調用復制構造函數(例如,我忘記添加移動構造函數)?
class MyHugeObject
{
public:
MyHugeObject()
{
}
MyHugeObject(const MyHugeObject& m)
{
std::cout << "copy huge object\n";
}
// MyHugeObject(MyHugeObject&& m)
// {
// std::cout << "move huge object\n";
// }
};
MyHugeObject func()
{
MyHugeObject m1;
MyHugeObject&& m2 = std::move(m1);
return std::move(m2);
}
int main()
{
auto m = func();
return 0;
}
Output:
copy huge object
如果您的類型的復制構造特別昂貴或有問題,但您不想完全禁止,您可以將復制構造函數標記為explicit
。 如果沒有明確請求,顯式復制構造函數將不允許復制(例如,您不能使用它自動按值傳遞 arguments),但仍可用於顯式復制構造。 同時,仍然可以允許隱式移動構造。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.