关于emplace_back的问题

C++语言 码拜 9年前 (2016-04-13) 874次浏览
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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于emplace_back的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)