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: };