欢迎访问个人网络日志🌹🌹知行空间🌹🌹
STL vector容器emplace_back和push_back的区别
这个问题可以讲是C++
面试问到的比较频繁的问题了,今天复习C++
类的默认生成的函数时,使用例子来说明下这两个函数的区别。
C++的三法则和五法则
在C++11
以前,如果一个类需要析构函数,则一定需要拷贝构造函数和拷贝赋值操作符,譬如类包含指针成员时。这个是三法则。
C++11
后又添加了移动语义支持的移动构造函数和移动赋值操作符。因此扩充后称为五法则。
C++11
及以后,编译器会默认为类生成8个函数,分别是:
- 默认构造函数
- 默认析构函数
- 默认复制构造函数
- 默认赋值运算符重载函数
- 默认移动构造函数
- 默认移动赋值运算符重载函数
- 默认取地址函数
- 默认取地址const函数
比较emplace_back
和push_back
函数
push_back
和emplace_back
都是往vector
容器追加一个元素push_back
是复制或者移动一个对像到vector
中emplace_back
支持直接调用对像的构造函数,避免像push_back
那样的复制和移动。
代码比较:
先定义Object
类和包含vector
成员的MultObjects
:
class Object {
public:
Object() {
std::cout << "Object created.\n";
}
~Object() {
std::cout << "Object deleted.\n"