smarter pointer의 일종인 auto_ptr의 특징과 stl의 주요 특징인 '모든 원소의 접근은 값의 복사가 기본이다'를 상기한다면 이 챕터의 이야기는 매우 간단해집니다. auto_ptr은 최초에 할당이 이루어지고 대입이 이루어질 때 마다 권한이 위임되어 원래의 포인터는 null이 됩니다. 문제는 stl의 기본 동작은 다음을 전제한다는 점입니다. '모든 원소의 대입은 값 복사가 기본이다' 다시말해 operator[], =,at같은 원소들은 컨테이너의 원소가 복사되지 포인터나 레퍼런스를 반환하지 않습니다. 따라서 stl에서의 auto_ptr의 사용은 다음과 같은 문제를 야기합니다. . Widget 타입으로 선언된 auto_ptr의 a에 v[0]을 대입하게 되는 순간 값의 복사가 일어남과 동시에 v..
이번 장은 간단하면서도 STL사용에 있어 중요한 장입니다. 제목과같이, 컨테이너의 요소로써 포인터를 사용한다면 컨테이너가 소멸되기전 필수로 각 객체의 메모리를 해제하라입니다. 위의 코드는 단번에 문제가 어디서 발생하는지 알 수 있습니다. 컴파일도 잘되며 실행하는데 런타임에 죽거나 하는 문제가 생기지 않을것입니다. 하지만 메모리의 누수는 심각한 문제로 다가옵니다. 작은 프로그램에서, 요즘같은 성능이 좋은 컴퓨터에서야 얼마나 문제가 발생하겠냐만 컨테이너에 들어가 있던 객체 몇십만개 였다면? 그 객체 자체의 크기가 크다면? 또는 그 객체가 물고 있던 메모리들은? (객체의 소멸자가 호출되어 물고 있던 자원을 해제한다면) 또는 서버와 같이 오랫동안 메모리에 올라가 있어야할 프로그램에서 꾸준히 메모리 누수가 발생한..
이번편의 주제는 원소의 할당 전략입니다. 원소의 대입 혹은 할당전략은 여러가지가 있을 수 있습니다. 1. for문을 이용한 할당 (push_back, 혹은 공간을 할당받은 후 [], 반복자를 통한 할당) 2. algorithm function사용 copy, fill, replace등의 함수가 대표적인 함수들. 3. range member function( or range constructor) 사용. insert, assign함수나 range 생성자를 이용한 방법입니다. 1번의 경우에는 stl에 있어 권장되지 않는 방법입니다.for문으로 인해 함수의 호출횟수가 비효율적으로 증가하며 가독성도 떨어지기 때문입니다. 2번의 경우에는 코드가 간결해지고 가독성도 좋아지긴 하나 실제로는 반복문을 암시적으로 사용하고..
- Total
- Today
- Yesterday
- python
- Spring
- 알고리즘
- 중국여행
- 중국
- printf
- 카카오 공채
- Algorithm
- 코드잼
- kernerl
- 문자열
- 악보
- 여행
- regex
- 사천
- Codejam
- compile
- linux
- 이루마
- Pointer
- link
- STL
- peram jam
- C language
- 피아노
- 정규표현식
- C++
- cpp
- yiruma
- 드럼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |