为了了解 C++11 的复杂性,我玩unique_ptr
了一下。
我想知道,有什么方法可以iota
用来初始化 Containerunique_ptr
吗?
我从运行良好的 unique-ptr-less 解决方案开始:
std::vector<int> nums(98); // 98 x 0
std::iota(begin(nums), end(alleZahlen), 3); // 3..100
现在让我们尽可能使用unique_ptr
std::vector<std::unique_ptr<int>> nums(98); // 98 x nullptr
std::unique_ptr three{ new int{3} };
std::iota(begin(nums), end(nums), std::move{three});
这显然失败了。原因:
- 虽然我标记
three
为move
a&&
这可能不足以将初始值复制/移动到容器中。 ++initValue
也不会工作,因为initValue
是 typeunique_ptr<int>
,并且没有operator++
定义。但是:我们可以定义一个自由函数unique_ptr<int> operator++(const unique_ptr<int>&);
,并且至少可以解决这个问题。- 但是再次不允许复制/移动该操作的结果,
unique_ptr
这一次我看不到如何欺骗编译器使用move
.
嗯,这就是我停下来的地方。我想知道我是否错过了一些关于如何告诉编译器他可能move
是operator++
. 还是还有其他障碍?