使用移动语义重载方法

时间:2016-08-09 09:44:53

标签: c++ move-semantics overloading

当我尝试使用rvalue reference作为参数的方法重载方法时,我得到一个错误:

  

错误:调用重载'Test(std :: unique_ptr)'是不明确的   测试t(std :: unique_ptr(new int(1)));

代码:

class Test {
public:
    Test(std::unique_ptr<int> val)
        : v_(std::move(val)) {
        std::cout << "Ctor" << std::endl;
    }

    Test(std::unique_ptr<int>&& val)
        : v_(std::move(val)) {
        std::cout << "Move Ctor" << std::endl;
    }

private:
    std::unique_ptr<int> v_;
};

int main()
{
    Test t(std::move(std::unique_ptr<int>(new int(1))));
    return 0;
}

像编译器一样,我很困惑。实际上,编译器可以调用接收rvalue引用的fucntion,或者它可以使用rvalue引用调用unique_ptr构造函数并调用第一个方法。为什么不选择前者?

0 个答案:

没有答案