class CTest
{
public:
	CTest(int i) : value(i)	{}
public:
	int value;
private:
	CTest(const CTest &tem)	{}
};
vector<CTest> vecTest(10, CTest(-1));//这句话不能通过编译
问题一:
如上代码,为什么vector<CTest> vecTest(10, CTest(-1));不能通过编译?
当将类的复制构造函数的访问权限变为public的时候就能通过编译为什么?
class CTest
{
public:
	CTest(int i) : value(i)	{}
	CTest(const CTest &tem)	{}
public:
	int value;
private:
};
vector<CTest> vecTest(10, CTest(-1));
vecTest.emplace_back(0);
vecTest.emplace_back(1);//结果:前10个元素值是无意义的,然后是0, 1
问题二:为什么前10个元素的值是无意义的?
class CTest
{
public:
	CTest(int i) : value(i)	{}
	CTest(const CTest &tem)	{}
public:
	int value;
private:
};
vector<CTest> vecTest;
vecTest.emplace_back(0);
 vecTest.emplace_back(1);//vecTest = [2]({value=-842150451 },{value=1 })
问题三:为什么vecTest 第一个元素值是无意义的值?
解决方案
5
1.
vector (size_type n, const value_type& val,
const allocator_type& alloc = allocator_type());
内部实现就是复制10,修改为private复制啥.
2. lz复制构造函数啥都不写复制啥
3. 同上
vector (size_type n, const value_type& val,
const allocator_type& alloc = allocator_type());
内部实现就是复制10,修改为private复制啥.
2. lz复制构造函数啥都不写复制啥
3. 同上
5
私有拷贝构造函数 ,权限的原因不能调用
还没有 operator =
还没有 operator =
10
问题一:原因是vector初始时会进行对象复制,你复制构造函数设置为私有则无法进行对象复制
问题二三,复制构造函数中要加上 value = tem.value,或直接不要写复制构造函数(使用默认的)
问题二三,复制构造函数中要加上 value = tem.value,或直接不要写复制构造函数(使用默认的)
10
class CTest
{
public:
	CTest(int i) : value(i)    {}
	CTest(const CTest &tem)    {value = tem.value;}
public:
	int value;
private:
};