class CTest { public: CTest(int i) : value(i) {printf("b0\n");} CTest(CTest&) {printf("b1\n");} public: int value; private: CTest& operator=(CTest &tem){return tem;} }; { vector<CTest> vecTest; vecTest.emplace_back(0); vecTest.emplace_back(1); } printf("--\n"); { vector<CTest> vecTest; vecTest.emplace_back(0); }
vs2010 输出:
b0
b1
b0
—
b0
本人的疑问:问一下b1是怎么样被输出的?
解决方案
7
{ vector<CTest> vecTest; vecTest.reserve(233); vecTest.emplace_back(0); vecTest.emplace_back(1); } printf("--\n"); { vector<CTest> vecTest; vecTest.emplace_back(0); }
12
第一个元素仍然是复制过去的,之后才是直接“就地生成”,题主可以单步跟踪emplace_back内代码
7
vector “生长”过程中出现的拷贝。
你可以换成 list ,看还有没有 b1
你可以换成 list ,看还有没有 b1