欢迎访问个人网络日志🌹🌹知行空间🌹🌹
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";
}

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



