본문 바로가기

pointer

(3)
항목 33 : remove와 비슷한 알고리즘을 포인터의 컨테이너에 적용할 때에는 각별히 조심하자. 내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이번 항목은 포인터를 컨테이너에 담았을 때, remove-erase 합성문으로 지워도 메모리 누수가 발생할 수 있다는 지적을 해준다. 당연하겠지만.. 포인터를 담는 변수를 지운다고 해서, 포인터의 실제값이 사라지는게 아니기 때문이다. 누누히 말해오는 것이기 때문에 길게 이야기 할것 없이 결론만 말한다. 포인터를 담는 컨테이너의 경우, 1. 직접 delete 시켜주고 날리거나, 2. 스마트 포인터를 담아주자.
항목 6: typedef, 포인터 가지고 장난 치지 마라. 이 코드를 우선 보면 #include using namespace std; typedef struct { unsigned int a; int b; int c; } TEST, *LPTEST; int main(void) { LPTEST test_data; LPTEST aaa; aaa = (TEST *)malloc(sizeof(TEST)); aaa->a = 1; aaa->b = 2; aaa->c = 3; DWORD test = (DWORD)aaa; test_data = (LPTEST)test; } 이해하기 쉬운가? 갑자기 포인터에 DWORD로 형 변환시켜서, 저장한 다음에, 그것을 다시 LPTEST 형으로 다시 변환시켜서 ... 쓴다. 애초에 void* 로 넘겨 버려서 사용한다면, 더 가독성이 좋을텐데 말이다..
항목 1 : 포인터와 참조자를 구분하자 항목 1 : 포인터와 참조자를 구분하자. 개념 정리 포인터(pointer)는 NULL 을 가질수 있다. 참조자(reference)는 NULL 을 가질수 없다. 그렇기 때문에 C++ 스펙에는 참조자는 선언과 동시에 정의해야 한다. 그리고 참조자는 초기에 참조하고 있는것만 참조 할수 있으며, 다른 객체로 바꿀수 없다. 이유 1. 더 효율적인 코딩이 가능해 진다. 해결 방법 1. 각각 어떨때 쓰는지 알아 두어야 한다. 포인터(pointer)는 가리키는 객체의 주소가 없을 때가 있거나, 하나의 포인터로 여러개의 객체를 가리킬 필요가 있을 때 참조자(reference)는 가리키는 객체의 주소가 시작부터 끝까지 있거나, 오직 한개의 객체만 가리킬 때 여기에 참조자(reference)를 쓸때가 한가지 더 있다. op..