[C++][Test]vector拷貝及函數參數傳遞中拷貝問題

Test Code

#include <iostream>
#include <vector>

class Element {
public:
    Element() {
        std::cout << "Element constructor" << std::endl;
    }
    ~Element() {
        std::cout << "Element destructor" << std::endl;
    }
    Element(const Element& _ele) {
        std::cout << "Element copy constructor" << std::endl;
    }
};

static Element g_m;

void set(Element _e) {
    g_m = _e;
}

void set_sec(Element& _e) {
    g_m = _e;
}

Element get(void) {
    return g_m;
}

void test_for_vec_copy(void) {
    std::cout << __FUNCTION__ << std::endl;
    std::vector<Element> vec;
    std::cout << vec.capacity() << std::endl;
    Element e;
    vec.push_back(e);
    std::cout << vec.capacity() << std::endl;
    vec.push_back(e);
    std::cout << vec.capacity() << std::endl;

    std::vector<Element> vec2 = vec;

    std::cout << "hahaha" << std::endl;
}

void test_for_set(void) {
    std::cout << __FUNCTION__ << std::endl;
    Element e;
    set_sec(e);
    std::cout << "-----------beautiful line------------" << std::endl;
    set(e);

    std::cout << "hahaha" << std::endl;
}

int main()
{
    test_for_vec_copy();
    test_for_set();
}

Test Result

Element constructor
test_for_vec_copy
0
Element constructor
Element copy constructor
1
Element copy constructor
Element copy constructor
Element destructor
2
Element copy constructor
Element copy constructor
hahaha
Element destructor
Element destructor
Element destructor
Element destructor
Element destructor
test_for_set
Element constructor
-----------beautiful line------------
Element copy constructor
Element destructor
hahaha
Element destructor
Element destructor

Summary

Point1 vector賦值,可能導致大量的拷貝工作
Point2 vector默認容量不足的情況下,可能導致內存的拷貝,釋放

Thanks For Watching, Have a nice day!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章