【发布时间】:2018-03-26 17:27:40
【问题描述】:
考虑下面的例子:
#include <iostream>
#include <vector>
class S {
public:
S() { puts("S()"); }
S(int) { puts("S(int)"); }
~S() { puts("~S()"); }
S(const S &) { puts("S(const S&)"); }
S(S &&) { puts("S&&"); }
const S &operator=(const S &s) {
puts("=");
return s;
}
S &operator=(S &&s) {
puts("Move =");
return s;
}
};
int main() {
std::vector<S> s;
s.emplace_back();
s.emplace_back(6);
}
O/p:
S()
S(int)
S(const S&)
~S()
~S()
~S()
当只有一个元素是emplaced_back 时,constructor/destructor pair 只被调用一次。但是当有多个emplace_back(如s.emplace_back(6);)时,也会调用copy constructor。为什么这种行为差异? emplace_back 还存在副本吗?
【问题讨论】:
标签: c++ c++11 copy-constructor emplace