내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 new 나 delete 를 바꾸는것이 아니라 operator new 와 operator delete 를 오버로딩 하여 바꾸는 것이다. 그리고 이 오버로딩으로 재정의 되면, 사용자가 일일이 다 지정해 주어야 하는 관례들이 있다. 이 관례를 따라서 구현을 할 때 조금이라도 실수를 한다면, ... 악영향을 많이 미치기 때문에, 굳이 변경 할 여력이 되지 않는다면 변경하지 않는게 더 좋다고 말한다. 기본적으로 컴파일러가 재공하는 operator new 와 ope..
new 검색 결과
내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이번 항목은 new 처리자에 대한 개념과 어디에 주로 사용되는지에 대해서 알려 준다. new 처리자 곰곰히 들으면 잘 모르니, 우선 말로만 설명 풀이 해보자. 우리는 메모리를 할당하기 위해서 new 연산을 이용한다. 하지만 자세히 들어가보면 operator new 가 호출되고 new 가 호출되는 구조로 이어진다. 그러니까 operator new -> new 를 처리 한다. 이때 operator new 는 우리 스스로가 오버로딩 하여 재정의 할 수 있지만 ..
무슨말?(제목이 조금 길다) 객체 생성 직 후 스마트 포인터에 저장한 다음, 그 스마트 포인터로 사용하라는 뜻 왜!? 메모리 누수가 발생될 수 있기 때문이다. 언제? 함수의 매개변수로써 스마트 포인터를 받을 때, 함수의 매개변수가 초기화가 이루어지는 타이밍이 각각의 컴파일마다 다르기 때문에, 매개변수 초기화가 만약.. 1. 동적 메모리를 할당 예, new CBabo 처럼 2. 함수의 리턴값을 매개변수로 할당 예, sence() 3. 스마트포인터에 동적 메모리를 담는다. 예) Smart_PTR pw에 1번의 리턴 담음 바로 이때 2번에서 예외가 발생하면, .. 1번은 영영 잃어 버리게 된다. 이렇게 매개변수 초기화 타이밍이 각 컴파일마다 다르고 바뀔 수 도 있다. 그래서 매개변수의 초기화가 언제 발생 되는..
여기서 말하는 형태는 무엇인가? new 와 delete, new [] 과 delete [] 를 말한ㄷ. 왜 형태를 맞추어야 하는가? new 연산은 단일 객체 메모리 잡는 연산자이고 delete 역시 단일 객체 메모리 푸는 연산자이다. new[] 연산은 객체 배열을 메모리에 잡는 연산자이고 delete[] 역시 객체 배열을 메모리에 푸는 연산자이다. 만약 맞추지 않으면 어떻게 되는가? new [] 로 객체들 5개를 잡았고 delete 를 이용하면 1개의 객체만 풀어주고 나머지 4개는 프로그램 종료되기 까지 잡고 있는 어처구니 없는 사태가 발생한다. 굳이 주의해야 하는 것은? typedef 로 typedef std::string addressLines[4] 로 잡은 뒤 std::string *p = new ..
부재 : new와 operator new 의 차이점에 대해서 숙지해라. 이유 1. operator new 와 new 는 엄연히 차이를 보이기 때문이다. 해결방법 .. 각 차이점을 이해 한다. new 연산자는 1. 오버로딩이 안된다. 2. 내부적으로 operator new를 호출한다. 3. 생성자를 호출한다. 4. 객체형 포인터를 반환한다. operator new 는 1. 메모리 할당을 받는다. 2. void *형을 반환한다. delete 역시 마찬가지다. operator new 와 operator delete 는 C++ 판 malloc 과 free 함수 이다. 배열을 new 할때의 차이점 1. new는 똑같지만 내부적으로 operator new[] 를 호출 한다. 2. 그리고 각각 new에 의해서 생성자..
항목 31. 지역 객체에 대한 참조나 함수 내에서 new를 이용해 초기화된 포인터를 가리키는 참조를 리턴하지 말라 : 정말 제목을 자세하게 적었다.. 이유 1. 항목 29와 중복 2. new에 대해선 관리가 상당히 까다롭게 변한다. (빈대 잡으려다 집태운 격, 배보다 배꼽이 큰 격) 해결 방법 1. 아예 사용 하지 말라니까... 참조 내부 객체가 있는 함수가 내부객체의 포인터나 레퍼런스를 리턴할 시 발생하는 일 1. 동적(?)으로 내부 객체 생성(동적인지는 모르겠으나 그 상황이 동적메모리 처럼 보인다) 2008/06/07 02:30 수정 1. 스택에 함수내부에서 사용될 객체를 생성 2. 내부 객체 사용 3. 내부객체 리턴 4. 바로 내부 객체 파괴 개인적 생각 이것을 피하기 위해서 new을 사용한다면, ..
최근댓글