[英]Why this program has this behaviour (push_back)?
編碼:
// test2.cpp
#include <vector>
#include <iostream>
struct test_class
{
test_class() = default;
test_class(const test_class& t)
{
std::cout << "Copied" << std::endl;
}
};
int main()
{
test_class a;
std::vector<test_class> v;
for (int i = 0; i < 5; ++i) {
v.push_back(a);
std::cout << std::endl;
}
}
行為:
$ g++ --version | grep g++
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
$ g++ -std=c++11 test2.cpp
$ ./a.out
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
每個push_back
執行“未定義”的副本數(其中只需執行一個副本)。
這里發生了什么?
向量像數組一樣分配連續內存。 如果內存末尾沒有更多空間,則必須重新分配整個向量。 在此之后,它會將元素從舊位置復制到新位置並刪除舊元素。
您可以初始化它以至少能容納5個元素,因此在您的示例中不會有內存分配和復制:
std::vector<test_class> v(5);
push_back
可能導致vector
增長超出其分配的存儲空間,從而導致重新分配,從而導致內容被復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.