이유에 앞서, 왜 사람들은 자신만의 new와 delete를 필요로 할까? 1. 효율성 때문 - operator new 와 operator delete의 디폴트 버전들은 일반적인 목적에 적합하다(제네릭 프로그래밍) - 해체작업시 개별 객체 해체는 개별 객체에 대한 크기 정보가 필요하다. - 개별 객체의 크기가 4바이트라 가정할때, 이 크기를 저장할 변수도 4바이트이다(포인터 크기 32비트환경) - 그러면 4바이트 할당을 위해 4바이트 소모는 .. 엄청난 비효율이다. 이유 1. 효율적인 해체가 가능해 지기 때문에 2. 항목 5가 가장 큰 이유 해결방법 1. 항목 8, 9 사용 2. union 으로 해결 (2. 개인적 생각, 클래스의 특성에 맞게 STL 로 작성하는게 더 효과적이라고 생각됨, 21세기(책은 2..
전체 글 검색 결과
이유 1. 내부 영역에서의 변수명이나 함수명은, 외부 영역의 동일한 이름을 감춘다. 2. 감춤으로써 확장성이 떨어지기 때문이다. 해결방법 두가지 1. 클래스에 정의되어 있는 오버로딩된 operator new를 선언할 때 정상형식을 갖춘 operator new를 만들어 둔다. (참조. 이때 클래스에 정의된 operator new를 쓸때는 매개변수를 오버로딩에 맞춘다. 이것도 기초 문법이다) 2008/07/02 14:53 수정 2. 클래스에 정의되어 있는 오버로딩된 operator new의 매개변수를 디폴트값을 넣어, 분기 시켜라 (개인적으로 이 방법이 편하다고 생각된다) 2. 오버로딩된 매게변수에 따라 분기 시키는 방법과 using 키워드를 이용하여, 이름을 가리지 않도록 한다. 덧붙여 어느 방법이건 간에..
이유에 앞서, C++ operator new 와 operator delete의 관례란? 1. 올바른 인자값을 가져야 한다. 2. 메모리가 충분하지 않을때 에러처리 함수를 호출해야 한다. 즉, 사용 가능한 메모리가 없을 때 요구에 대처해야 한다. 이유 1. 부모 클래스에 선언한 operator new(new[])를 상속 받은 자식 클래스는 부모클래스의 new를 호출한다. (이때 오버라이딩은 되지 않는다. 문법 기초다. 그래서 오버로딩을 해서 쓰는데, 역시 오버로딩의 한계가있다) 하지만 대개 자식 클래스는 부모클래스보다 메모리를 더 많이 차지하므로, 자식클래스의 메모리 할당시 부모클래스의 용량(메모리)로 잡을수도 없는 노릇이다. 부모클래스의 용량을 포함하는 자식클래스의 용량의 할당이 올바른 반환값이다. 한마..
이유 1. 동적 메모리 할당시, 메모리가 되었을 때, 여러 이유로 오류가 날수 있다. 이 오류에 대해서 대처하지 않으면 프로그램이 안정적이지 못하기 때문이다. (참고)new연산자는 메모리 요구를 수행하지 못하면, 수행될때까지 루프를 돈다. 해결 방법 operator new가 요구된 메모리를 할당할 수 없을 때 new 핸들러 함수는 다음중 한가지를 실행시킨다. 1. 좀더 많은 메모리르 확보한다. 방법 : 프로그램 시작시 큰 메모리를 할당받게 한다. 그리고 new 핸들러가 호출되었을때, 이 미리 받은 메모리를 해체한다. 단점 : 가끔 메모리가 적거나 좀더 많은 메모리가 확보되지 않으면, 다음에 발생되는 new가 원할히 작동될수 없다. 2. 다른 new 핸들러를 설치한다. 방법 : set_new_handler..
이유 1. 메모리 릭이 발생되기 때문이다. 2. 동적메모리 할당 중 에러 발생시, 예상치 못한 결과가 나올수 있다. (참고) 널포인터 삭제는 언제나 안전하기 때문이다. 해결방법 1. 할당에 실패할시 0값을 넣어라. (C++0x 가 적용되면 nuulptr 이 쓰일것으로 생각된다) 2. 소멸자에서 delete를 이용해라. 3. 다음의 사항을 기억해라. - 생성자 각각에서 포인터의 초기화, 만일 특정 생성자에서 메모리 할당되지 않았을 경우 0으로 초기화해라 - 할당 연산자에서 기존 메모리를 삭제하고 새로운 메모리의 할당해라(0값 해체는 아무일도 없음) - 소멸자에서 포인터를 삭제 해라 주의점 1. 클래스 생성시 new를 사용하지 않았다면, delete를 수행하지 말아라. (부득이하게 malloc으로 생성했다면..
이유 1. 메모리 릭 발생되기 때문이다. - new string[100] 했으면 delete []string 해줘야 한다. delete string 하면 100개의 요소중 1개만 해제한다. - 클래스의 객체라면 소멸자 역시 1번만 발생 된다. - typedef 사용시 delete시 착각의 위험에 빠질수 있다. 해결 방법 1. 동일한 형식으로 사용 한다. 2. typedef를 사용 하지 마라! 덧붙여 1. 여러 문자열을 할당받고 싶다면 vector을 사용 해라. 더 편하다
최근댓글