std::vector로 배우는 레벨업 #1에 이어서…
resize를 구현해 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
void resize(size_t newSize) { // 공간을 확보 reserve(newSize); // 늘어난 사이즈만큼 생성자를 호출 for (size_t i = _size; i < newSize; ++i) { auto p = _data + i; new(p) T(); } // 줄어든 사이즈만큼 소멸자를 호출 for (size_t i = newSize; i < _size; ++i) { auto p = _data + i; p->~T(); } _size = newSize; } |
아래 테스트 코드를 통해 동작을 확인해보자.
1 2 3 4 5 6 7 8 9 10 11 |
std::cout << "std::vector<Foo> :" << std::endl; std::vector<Foo> stdVec; stdVec.resize(3); stdVec.resize(1); std::cout << std::endl; std::cout << "MyVector<Foo> :" << std::endl; MyVector<Foo> myVec; myVec.resize(3); myVec.resize(1); |
code
more code
~~~~