분류 전체보기(603)
-
[effective STL] 항목 08 : auto_ptr의 컨테이너는 절대 말들지 말기
문제점auto_ptr의 특징상 소유권이 이전 되면 이전의 포인터가 NULL이 된다.정렬이나 기타 알고리즘을 사용할 때 특히 치명적이다.지역 내에 있던 포인터가 있다면 그 포인터는 지역이 끝날 때 해제가 된다.그러므로 컨테이너의 포인터가 하나 이상의 데이터가 NULL이 된다. 예시sort 함수. 변형된 퀵소트 알고리즘을 사용하고 있다.컨테이너 내의 특정 요소를 '피벗'으로 잡고 선택한 후에 분할정복.피벗은 지역에서 자동 해제된다.(가리키고 있는 원본도) 해결사용하지 말자.
2015.09.06 -
[effective STL] 항목 07 : 포인터를 컨테이너 담을 때 주의
이유컨테이너는 소멸시에 객체의 메모리를 해제하지만 포인터의 소멸자가 아무 일도 하지 않는다.포인터에 대해 delete를 하지 않기 때문!! 예제1234567891011void doSomthing(){ std::vector vwp; for (int i = 0; i
2015.09.06 -
리눅스 vim cheat sheet 2015.09.05
-
[effective STL] 항목 06 : C++ 컴파일러의 어이없는 컴파일 조심!
예시int 데이터가 들어 있는 파일을 가지고 있고, int를 vector에 복사한다고 가정한다.1234 std::ifstream dataFile("ints.txt"); std::vector data(std::istream_iterator(dataFile), std::istream_iterator());cs 그럼 이런 코드가 생성될 수가 있다.(이렇게 복잡한 코드가...............) 실제로 구현을 해보니 data 자체를 백터로 인식조차 하지 못했다. data라는 이름의 함수로 인식. 이유인 즉슨,첫 번째 매개 변수는 dataFile이란 이름을 가진다. 타입은 istream_iterator이고 dataFile을 둘러싼 괄호는 컴파일러가 무시한다.두 번째 매개 변수는 이름을 가지고 있지 않다. 타입..
2015.09.05 -
인라인함수 따져보기(effective c++ 30)
인라인 함수장점함수처럼 보이고 함수처럼 동작하는데다가 훨씬 안전하고 쓰기 좋다.함수 호출 시 발생하는 오버헤드도 걱정할 필요가 없다. 숨겨진 이점함수 호출 비용이 면제되는 것은 눈에 보이는 부분에 불과하다. 인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별(context-specifc) 최적화를 걸기가 용이해진다. 단점인라인 함수로 인해 부풀려진 코드는 성능의 걸림돌이 되기 쉽다.페이징 횟수가 늘어나고 명령어 캐시 적중률이 떨어질 가능성도 높아진다. 컴파일러잘 알다시피 인라인 키워드를 붙인다 하더라도 컴파일러가 판단하여 인라인을 하여 성능이 좋아진다면 인라인할 것이고 그게 아니라면 인라인을 하지 않는다. 생성자/소멸자생성자와 소멸자는 인라인하기에 그리 좋지 않은 함수이다.생성자와 소멸자는 내부에..
2015.09.04 -
예외 안정성 확보(effective C++ 29)
예외 안정성요구사항- 자원이 새도록 만들지 않는다.(함수 내부에서 동적할당한 후 해제하지 않고 탈출하는 경우)- 자료구조가 더럽혀지는 것을 허용하지 않는다.(정상적인 동작을 예상하고 카운트 등을 증가시켰는데, 예상치 못한 예외에 의해 함수에서 탈출해버리는 경우) 보장성예외 안전성을 가진 함수는 아래의 세 가지 보장(Guarantee) 중 하나를 제공한다.- 기본적인 보장(Basic Guarantee) : 함수 동작 중 예외가 발생하면, 실행 중인 프로그램에 관련된 모든 것들을 유효한 상태로 유지한다. - 강력한 보장(Strong Guarantee) : 프로그램의 상태를 절대로 변경하지 않는다는 보장. 호출이 실패하면 호출 자체를 없었던 것처럼 하여 프로그램의 상태가 되돌아간다.- 예외불가 보장(Nothr..
2015.09.04