{ 내부의 것은 무엇을 말하는가? 바로 핸들을 말한다. 핸들이란 무엇인가? 차라는 녀석을 마음데로 움직이는 조종대 이다. 이 조종대를 왜 노출 시키지 말아야 하는가? 나라에선 차가 너무 유용하고, 위험하기에, 운전면허증을 따야지만 몰 수 있게 만들었다. 마찬가지다. 핸들 역시 아무에게나 잡을 수 있게 허락해 준다면, 위험해서 도로에 나오겠는가? .. 너무 비유만 하지 말고 C++ 로 설명해 해줘~ 소켓을 예로 들겠다. #include class CSocket { public: SOCKET get_socket() { return s_; } private: SOCKET s_; }; int main( void ) { CSocket s; SOCKET sock = s.get_socket(); closesocket..
포인터 검색 결과
내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이번 항목은 포인터를 컨테이너에 담았을 때, remove-erase 합성문으로 지워도 메모리 누수가 발생할 수 있다는 지적을 해준다. 당연하겠지만.. 포인터를 담는 변수를 지운다고 해서, 포인터의 실제값이 사라지는게 아니기 때문이다. 누누히 말해오는 것이기 때문에 길게 이야기 할것 없이 결론만 말한다. 포인터를 담는 컨테이너의 경우, 1. 직접 delete 시켜주고 날리거나, 2. 스마트 포인터를 담아주자.
2008/07/18 - [IT 전뇌실/Effective STL 초판] - 항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자 에서 상등 관계와 동등관계를 정리해 둔것이 있었다. 연관 컨테이너(Associative Containers)에 값을 넣을 때는 그 연관 컨테이너가 어떤 연관순서로 정렬이 되는지 동등관계의 비교타입을 정의해 두어야 한다. 하지만 포인터를 넣는 연관컨테이너는 어떻게 될까? 이 경우에 포인터의 비교타입을 정해두지 않는 다면, 포인터의 동등(equibelence)관계로 정렬이 되기 때문에 원하는 정렬을 하지 못한다. 실험 코드를 준비 했다, 메모리 누수는 .. 알아서 대처 하도록 #include int main(void) { std::set c..
항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다. 개념정리 다형성 : 기본 클래스 객체의 포인터나 참조자를 통해서 파생 클래스 객체를 조작 하는 성질 public 상속의 쓰임 중 함수의 인자값이 기본클래스의 포인터나 레퍼런스일때 파생클래스도 받을수 있도록 해준다. 이유 1. 파생 클래스의 객체의 크기와 기본 클래스의 객체의 크기가 다르기 때문에, 포인터 계산(배열이니까!)시 오류가 발생한다! 해결방법 1. 배열의 포인터 계산과 다형성의 포인터 계산은 서로 다르다는 차이점을 숙지해라. 개인적인 생각 1. 이제부터 슬슬 기본 지식이 있어야지만 이해 할수 있는 수준이 나온다. 2. 이 차이점을 안다면, 코딩할 때 주의를 할수 있을것 같다.
항목 1 : 포인터와 참조자를 구분하자. 개념 정리 포인터(pointer)는 NULL 을 가질수 있다. 참조자(reference)는 NULL 을 가질수 없다. 그렇기 때문에 C++ 스펙에는 참조자는 선언과 동시에 정의해야 한다. 그리고 참조자는 초기에 참조하고 있는것만 참조 할수 있으며, 다른 객체로 바꿀수 없다. 이유 1. 더 효율적인 코딩이 가능해 진다. 해결 방법 1. 각각 어떨때 쓰는지 알아 두어야 한다. 포인터(pointer)는 가리키는 객체의 주소가 없을 때가 있거나, 하나의 포인터로 여러개의 객체를 가리킬 필요가 있을 때 참조자(reference)는 가리키는 객체의 주소가 시작부터 끝까지 있거나, 오직 한개의 객체만 가리킬 때 여기에 참조자(reference)를 쓸때가 한가지 더 있다. op..
최근댓글