gpt4 book ai didi

c++ - move 初始化列表的元素是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:44 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
initializer_list and move semantics

在这段代码中:

#include <vector>
#include <initializer_list>

template<typename T>
class some_custom_container : public std::vector<T>
{
public:
some_custom_container(const std::initializer_list<T>& contents)
{
for (auto& i : contents)
this->emplace_back(std::move(i));
}
};

class test_class
{};

int main()
{
test_class a;

some_custom_container<test_class> i = { a, test_class(), a };
}

如果我理解的话,{ a, test_class(), a } 中的所有对象都是安全构造的:命名对象被复制,未命名对象被 move 以构造 initializer_list .之后,此 initializer_list 通过引用传递给 some_custom_container 的构造函数。

然后,为了避免无用的双重复制,我将它们全部 move 以填充 vector 。

这个构造函数安全吗?我的意思是,在一种奇怪的情况下,例如,如果 T 被评估为引用 & 或 &&, vector 是否总是填充良好(包含安全对象)?

如果是这样,为什么 STL 容器的 initializer_list 构造器实现不是这样实现的?据我所知,它们的构造函数复制但不 move 内容。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com