Part 8:new 와 delete 맞 춤 형
#include<iostream>
using namespace std;
void fun()
{
cout<<"error occur when allocate heap"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::new_handler p = fun;
set_new_handler(p);
long* pBigDataArray = new long[1000000000L];
getchar();
return 0;
}
서로 다른 클래스 가 분배 클래스 에 저장 되 는 데 오류 가 발생 하여 서로 다른 처리 함 수 를 호출 하려 면 함수 의 정 의 를 서로 다른 클래스 정의 에 넣 을 수 있 습 니 다.예 를 들 어 Widget class 의 메모리 할당 실패 상황 을 처리 하려 면 먼저"operator new 가 Widget 대상 에 게 충분 한 메모 리 를 할당 할 수 없 을 때"호출 하 는 함수 에 로그 인해 야 합 니 다.따라서 new 라 는 형식 을 설명해 야 합 니 다.handler 의 static 멤버,class Widget 을 가리 키 는 newhandler。 Widget 의 정 의 는 다음 과 같 습 니 다.
class Widget{
public:
static std::new_handler set_new_handler(std::new_handler p) throw();
static void* operator new(std::size_t size) throw(std::bad_alloc);
private:
static std::new_handler currentHandler;
};
std::new_handler Widget::currentHandler = 0;
std::new_handler Widget::set_new_handler(std::new_handler p) throw()
{
std::new_handler oldHandler = currentHandler;
currentHandler = p;
return oldHandler;
}
마지막 으로 위 젯 의 operator new 는 다음 과 같은 일 을 합 니 다.1 호출 표준 setnew_hanlder,Widget 의 오류 처리 함 수 를 알려 줍 니 다.Widget 의 newhandler 는 global new-handler 로 설치 되 어 있 습 니 다.2.global operator new 를 호출 하여 실제 메모리 분 배 를 실행 합 니 다.할당 에 실패 하면 global operator new 는 Widget 의 new-hanler 를 호출 합 니 다.그 함수 가 이제 막 global new-handler 로 설치 되 었 기 때 문 입 니 다.global operator new 가 최종 적 으로 충분 한 메모 리 를 할당 하지 못 하면 bad 를 던 집 니 다.alloc 이상.
4
4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.