push_back
1.一个临时对象的构造
2.一个临时对象的析构
3.一个容器内对象的拷贝构造
emplace``emplace_back
emplace emplace_back 在比较新的c++已经会判断是否去调用push_back了,所以基本上都用emplace即可.
#include
#include
#include
#include
#include
using namespace std;
class Point2D{
public:
Point2D(int a,int b){
std::cout<<"construct"<<std::endl;
x=a;
y=b;
}
Point2D(const Point2D& another){
std::cout<<"copy construct"<<std::endl;
x=another.x;
y=another.y;
}
~Point2D(){
std::cout<<"destruct"<<std::endl;
}
int x;
int y;
};
int main()
{
std::vector<Point2D> vec;
vec.reserve(5);
std::cout<<"________________________vec.push_back({1,2});_________________________"<<std::endl;
vec.push_back({1,2});
std::cout<<"________________________vec.push_back(Point2D(1,2));_________________________"<<std::endl;
vec.push_back(Point2D(1,2));
std::cout<<"________________________vec.emplace_back(1,2);_________________________"<<std::endl;
vec.emplace_back(1,2);
std::cout<<"________________________vec.emplace_back(Point2D(1,2));_________________________"<<std::endl;
vec.emplace_back(Point2D(1,2));
std::cout<<"vec.size="<<vec.size()<<std::endl;
return 0;
}
________________________vec.push_back({1,2});_________________________
construct
copy construct
destruct
________________________vec.push_back(Point2D(1,2));_________________________
construct
copy construct
destruct
________________________vec.emplace_back(1,2);_________________________
construct
________________________vec.emplace_back(Point2D(1,2));_________________________
construct
copy construct
destruct
vec.size=4
destruct
destruct
destruct
destruct