Notice
Recent Posts
Recent Comments
Link
- 책_곽용재님 홈페이지
- 책_노란북 - 책 가격비교
- 책_김재우-SICP번역
- 플밍_쏘쓰포지
- 플밍_CodingHorror ?
- 플밍_상킴
- 플밍_김민장님
- GPGStudy
- 플밍_미친감자님
- 플밍_jz
- 플밍_샤방샤방님
- 플밍_글쓰는프로그래머2
- 플밍_키보드후킹
- 사람_재혁
- 사람_kernel0
- 사람_박PD
- 사람_경석형
- 사람_nemo
- 사람_kikiwaka
- 사람_Junios
- 사람_harry
- 사람_어떤 개발자의 금서목록..
- 사람_모기소리
- 사람_낙타한마리
- 사람_redkuma
- 사람_영원의끝
- 사람_민식형
- 도스박스 다음카페
- 플레이웨어즈 - 게임하드웨어벤치마크
- http://puwazaza.com/
- David harvey의 Reading Marx's c…
- 씨네21
- 한겨레_임경선의 이기적인 상담실
- 본격2차대전만화 - 굽시니스트
- 영화_정성일 글모음 페이지
- 영화_영화속이데올로기파악하기
- 음식_생선회
- 죽력고
- 사람_한밀
- 플밍_수까락
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 김두식
- stl
- 진중권
- 인문학
- 소비자고발
- BSP
- Programming
- 노무현
- 일리아스
- 고등학교 사회공부
- modernc++
- 정신분석
- template
- 게임
- 삼국지6
- programming challenges
- 건강
- 단상
- 삼국지
- 강유원
- 태그가 아깝다
- 유시민
- c++
- 정성일
- 책
- 진삼국무쌍5
- 유머
- 영화
- 프로그래밍
- 고전강의
Archives
- Today
- Total
01-05 13:01
lancelot.com
Vector를 통해 배우는 Generic Container Idioms 본문
// default 생성자가 없다
class Point
{
int x=0;
int y=0;
public :
// Point() = default;
Point(int x, int y) : x(x), y(y) {}
};
- Generic Container IDioms
- Generic (template 기반) container를 설계할때, 저장되는 "타입이 가져야하는 요구조건을 최소화" 하도록 한다
- STL container 에 저장되는 타입의 최소요구조건 : 복사생성이 가능해야한다
- 아래 예시에서
- new T[sz] : T 타입은 반드시 default constructor 를 가져야함
- 메모리 할당과 호출을 분리하면 더욱 유연한 container가 된다
- operator new() 로 메모리할당
- placement new 를 사용해서 생성자 호출
- C++17 : new(주소) T(argument...);
- C++20 : std::construct_at(주소, argument...);
- 소멸자의 명시적 호출
- C++14 : 객체.~T();
- C++17 : std::destroy_at(객체주소);
template<typename T>
class Vector
{
T* buff;
std::size_t size;
std::size_t capacity;
public :
Vector(std::size_t sz, const T& value) : size(sz), capacity(sz)
{
// buff = new T[sz];
buff = static_cast<T*>(operator new(sizeof(T)*sz));
int i = 0;
try
{
for (i = 0; i < sz; ++i)
{
// new(&buff[i]) T; // default constructor
new(&buff[i]) T(value); // copy constructor
}
}
catch (...)
{
for (int j = i - 1; j >= 0; --j)
buff[j].~T();
operator delete(buff);
size = 0;
capacity = 0;
throw;
}
}
~Vector()
{
// delete[] buff;
for (int j = size - 1; j >= 0; --j)
buff[j].~T();
operator delete(buff);
}
};
int main()
{
Point pt(0, 0);
Vector<Point> v(10, pt);
return 0;
}