【发布时间】:2014-08-19 10:42:35
【问题描述】:
使用原生数组、std::array 和 std::vector 尝试以下代码
typedef unique_ptr<int> UPtr;
UPtr[] f() // wrong, how to return a native array?
{
UPtr a[] = { UPtr(new int(1)), UPtr(new int(2)) };
return std::move(a);
}
std::array<UPtr, 2> g()
{
std::array<UPtr, 2> a = { UPtr(new int(1)), UPtr(new int(2)) }; // compile ok but run wrong, 1 and 2 are not assigned
return std::move(a); // wrong, call a deleted function
}
std::vector<UPtr> h()
{
std::vector<UPtr> a = { UPtr(new int(1)), UPtr(new int(2)) }; // wrong, call a deleted function
return std::move(a);
}
全部失败。这里有很多问题。如何修复它们?非常感谢。
【问题讨论】:
-
您能否列出您遇到的问题,并针对每个问题简要说明您尝试解决的问题?
-
我在代码中显示了问题
-
错误与返回数组无关。大约是
initializer_list。 -
不要在返回语句中使用 std::move(a)。在所有情况下, a 已经是一个临时对象。
-
@Krozark:它肯定不是临时对象,因为它显然有一个名字。
标签: c++ arrays c++11 vector unique-ptr