Per*_*-lk 5 c++ containers initializer-list move-semantics c++11
可能重复:
initializer_list和移动语义
在这段代码中:
#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 };
}
Run Code Online (Sandbox Code Playgroud)
如果我理解了它,那么所有对象{ a, test_class(), a }都是安全构造的:复制了命名对象,并移动了未命名的对象来构造initializer_list.之后,initializer_list通过引用传递给它some_custom_container的构造函数.
然后,为了避免无用的doble-copies,我移动所有这些来填充向量.
这个构造函数安全吗?我的意思是,在一个奇怪的情况下,例如如果T被评估为参考&或&&,那么向量是否总是充满(包含它的安全对象)?
如果是这种情况,为什么initializer_liststl容器的构造函数实现没有以这种方式实现?据我所知,他们的构造函数复制并且不移动内容.
| 归档时间: |
|
| 查看次数: |
1650 次 |
| 最近记录: |