【发布时间】:2016-07-21 13:23:31
【问题描述】:
我正在研究完美转发的经典示例:智能指针制造商。
template<typename T>
//Return a smart pointer on the given objet
shared_ptr<T> smartPointerMaker(T&& arg)
{
return shared_ptr<T>(forward<T>(arg));
}
//In the main...
shared_ptr<int> p = smartPointerMaker(42);
但它没有编译,说“没有匹配函数调用'std::shared_ptr::shared_ptr(int)'”
【问题讨论】:
-
您应该使用
T&&进行转发,使用省略号...进行可变参数模板。 -
你从哪里得到这个例子的?它似乎没有任何“经典”。
-
现在您错过了创作的
new T部分。现在你正试图通过给它一个 int 作为参数来创建一个std::shared_ptr<int>,这显然是行不通的。
标签: c++ move-semantics