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