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!