emplace
std::move本身只做类型转换,对性能无影响
std::move本身只做类型转换,对性能无影响。 我们可以在自己的类中实现移动语义,避免深拷贝,充分利用右值引用和std::move的语言特性。 移动语义目的就是用浅拷贝代替深拷贝,右值引用跟深拷贝放到同一场景才是有意义的
为了观察std::vector中push_back和empl
为了观察std::vector中push_back和emplace_back的区别,我写了以上程序。根据输出发现,Base(1)被构造了3次,其中复制构造函数调了2次,Base(2)被构造了1次,没调用复制构造函数。那么Base(1)的复制构造函数被调了2次呢? 那么还有一次复制构造函数来自哪里?注意到 std::vector 为了支持任意大小,在增加元素的时候会出现扩容操作,而扩容的方法是重新分配空间,然后把数据复制过去,因此会在复制的过程中调用复制构造函数