簡體   English   中英

為什么這個程序有這種行為(push_back)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM