当达到::std::vector<T>
的容量且插入了其他元素时,在重新分配大部分内存后,似乎::std::vector<T>
复制构造数据。
如果我们有一个vector<vector<vector<int>>>
,这似乎非常低效,因为必须对整个内容进行深度复制。如果移动语义被利用,则开销(通常)每个条目都是常量,而不是无限制。
::std::move
内容吗?为了分析这一点,我实现了一个小型包装器类型DataPrinter
,每个构造/销毁都包含char
和cout
个::std::vector<DataPrinter> v;
::std::cout << "emplacing a\n";
v.emplace_back('a');
::std::cout << "emplacing b\n";
v.emplace_back('b');
::std::cout << "emplacing c\n";
v.emplace_back('c');
emplacing a
[0x60200000eff0] DataPrinter(a)
emplacing b
[0x60200000efd1] DataPrinter(b)
[0x60200000efd0] DataPrinter(DataPrinter[a]const &)
[0x60200000eff0] ~DataPrinter[a]()
emplacing c
[0x60200000efb2] DataPrinter(c)
[0x60200000efb0] DataPrinter(DataPrinter[a]const &)
[0x60200000efb1] DataPrinter(DataPrinter[b]const &)
[0x60200000efd0] ~DataPrinter[a]()
[0x60200000efd1] ~DataPrinter[b]()
。我明白了:
clang++ 3.5.0-10
我正在使用-fsanitize=address -std=c++1z
和function openNav() {
$("#navBar").show(1000);
}
function closeNav() {
$("#navBar").hide();
}
构建。