이유에 앞서, 왜 사람들은 자신만의 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을 사용 해라. 더 편하다
최근댓글