【发布时间】:2017-09-19 01:07:34
【问题描述】:
代码如下:
#include <memory>
#include <iostream>
template<typename T>
class Foo
{
public:
Foo(T&& val) :
val(std::make_unique<T>(
std::forward<T>(val)))
{
}
Foo(Foo&& that) :
val(std::move(that.val))
{
std::cout << *val << std::endl;
}
std::unique_ptr<int> val;
};
template<typename T>
void Func(Foo<T>&& val)
{
std::cout << *val.val << std::endl;
}
int main()
{
Foo<int> instance(10);
Func(std::move(instance));
return 0;
}
问题是我希望这里有两行输出(来自我的自定义移动构造函数和'Func' 函数),但我只得到一个。为什么?
【问题讨论】:
-
Func中的任何内容都不需要移动。编译器可能会说,把它弄掉,然后忽略你。 -
将
Func更改为auto val2(std::move(val)); std::cout << *val2.val << std::endl;,您将看到移动构造。
标签: c++ c++11 move-semantics