void CSTLMemoryTester::test_contain_assign() { #ifdef NEED_OPERATOR_FUNC typedef std::vector<CMyTestData> DataContainer; DataContainer srcDataContainer; //除了一开始的时候是构造函数,其他时候都是调用拷贝构造 DECLARE_MYTEST_DATA_COUNT_CHECKER(ConstructCheck,ctConstructCount, 5, __FILE__, __LINE__); { for (long i = 0; i < 5; i++) { srcDataContainer.push_back(CMyTestData(i, 0)); } { DECLARE_MYTEST_DATA_COUNT_CHECKER(ConstructCheck,ctConstructCount, 0, __FILE__, __LINE__); //赋值时会对容器中的每一个元素调用拷贝构造函数 -- DECLARE_MYTEST_DATA_COUNT_CHECKER(CopyConstructCheck,ctCopyConstructCount, 5, __FILE__, __LINE__); //超出dstDataContainer的生存周期后释放 DECLARE_MYTEST_DATA_COUNT_CHECKER(DestructCheck,ctDestructCount, 5, __FILE__, __LINE__); DataContainer dstDataContainer; dstDataContainer = srcDataContainer; } { DECLARE_MYTEST_DATA_COUNT_CHECKER(ConstructCheck,ctConstructCount, 0, __FILE__, __LINE__); //assign时会对容器中的每一个元素调用拷贝构造函数 -- DECLARE_MYTEST_DATA_COUNT_CHECKER(CopyConstructCheck,ctCopyConstructCount, 5, __FILE__, __LINE__); //超出dstDataContainer的生存周期后释放 DECLARE_MYTEST_DATA_COUNT_CHECKER(DestructCheck,ctDestructCount, 5, __FILE__, __LINE__); DataContainer dstDataContainer; dstDataContainer.assign(srcDataContainer.begin(), srcDataContainer.end()); } { DECLARE_MYTEST_DATA_COUNT_CHECKER(ConstructCheck,ctConstructCount, 0, __FILE__, __LINE__); DECLARE_MYTEST_DATA_COUNT_CHECKER(CopyConstructCheck,ctCopyConstructCount, 5, __FILE__, __LINE__); DECLARE_MYTEST_DATA_COUNT_CHECKER(DestructCheck,ctDestructCount, 5, __FILE__, __LINE__); DataContainer dstDataContainer; dstDataContainer.reserve(srcDataContainer.size()); std::copy(srcDataContainer.begin(), srcDataContainer.end(), std::back_insert_iterator<DataContainer>(dstDataContainer)); } } #endif }
// reserve memory for DataContainer void reserveData(size_type s) { m_data.reserve(s); }