일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 비교 함수 객체
- 다형성
- 예외
- effective stl
- 암시적 변환
- UE4
- 메타테이블
- 오블완
- lua
- resource management class
- Smart Pointer
- 스마트 포인터
- 참조자
- 루아
- 티스토리챌린지
- virtual function
- 게임
- Effective c++
- more effective c++
- operator new
- reference
- 언리얼
- 상속
- exception
- implicit conversion
- 영화 리뷰
- Vector
- 영화
- 반복자
- c++
Archives
- Today
- Total
스토리텔링 개발자
[Effective STL] 13. 배열보다 vector 본문
728x90
항목 13. 동적으로 할당된 배열보다는 vector와 string이 낫다
vector, string을 사용해야 하는 이유
1
- 동적 할당 배열의 경우 아래의 부담이 있다.
- 언젠가는 메모리를 해제해야 한다.
- delete도 메모리 타입에 따라 제대로 써야 한다.
- delete는 한번만 호출해야 한다.
- 하지만 vector, string은 이 모든 걸 알아서 해준다.
2
- STL 시퀀스 컨테이너이기 때문에 STL의 모든 알고리즘을 사용할 수 있다.
- 물론 배열도 사용 가능하긴 하지만 제한적이다.
- begin, end, size 같은 멤버 함수가 없다.
- iterator나 reverse_iterator, value_type 등의 중첩된 typedef 타입이 없다.
3
- 구식 코드 이식성 문제도 문제 없다.
- vector, string 데이터를 배열을 사용하는 C API로 넘길 수 있다.(항목 16 참조)
4
- 보통 string은 참조 카운팅으로 동작하도록 구현된다.(항목 15 참조)
- 성능 최적화에 유리하다.
- 물론, 다중 쓰레드 환경에서는 오히려 오버헤드를 불러일으키기도 한다.
- 참조 카운팅이 어떻게 구현되었는지 라이브러리를 확인해 보자.
사용하고 있는 string이 다중 쓰레드 환경에 적합하지 않다면?
- 라이브러리에서 참조 카운팅을 끌 수 있다면 끈다.
- 보통은 전처리자의 변수 값을 바꾸면 가능하게 되어 있다.
- 이식성을 희생하는 일이지만..
- 참조 카운팅을 사용하지 않는 다른 string을 구현(혹은 일부만 구현)한다.
- string 대신 vector<char>를 고려해 본다.
- vector는 원래부터 참조 카운팅을 하지 않도록 구현되어 있다.
- 물론 string 전용 멤버함수를 사용할 수 없다는 단점은 있지만,
- 일반적으로 표준 STL 알고리즘으로 해결이 가능하다.
728x90
'개발 > Effective STL' 카테고리의 다른 글
[Effective STL] 15. string 구현 방식 (0) | 2024.11.22 |
---|---|
[Effective STL] 14. vector reserve (0) | 2024.11.21 |
[Effective STL] 12. 쓰레드 안전성 (0) | 2024.11.19 |
[Effective STL] 11. 커스텀 할당자(Custom Allocator) (0) | 2024.11.18 |
[Effective STL] 10. 할당자(Allocator)의 제약 사항 (1) | 2024.11.14 |
Comments