수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693893
  • Today | 244
  • Yesterday | 588

Programming/C++2007/03/21 09:31

exception 클래스 확장하기

원본 : http://www.debuglab.com/knowledge/exceptionclass.html

1.요약

C++ 표준에는 exception이라는 상위 클래스가 있는데, MFC의 CException 과 같은 역할을 한다고 보시면 됩니다.

기본적은 exception 을 상속받는 클래스로서 bad_alloc, bad_cast, bad_typeid 등이 있는데, 이상하게도 Visual C++에는 bad_alloc 만 구현하지 않았습니다.

bad_alloc 은 new 가 실패했을때 던져지도록 약속된 Exception 클래스입니다.

여기서는 간단하기 bad_alloc을 구현해보겠습니다.


2.본문

우선 설명할 내용이 많지 않으므로 소스코드를 보여드리겠습니다.

#include <new.h> 

#include <exception> 

using namespace std; 



class bad_alloc : public exception 

{ 

public: 

    bad_alloc(const __exString& what_arg) : exception(what_arg) {} 

}; 



int NewHandler(size_t size) 

{ 

    throw bad_alloc("Operator new couldn't allocate memory"); 

    return 0; 

} 



int main(int argc, char* argv[]) 

{ 

    _set_new_handler(NewHandler); 

    _set_new_mode(1);  // use NewHandler for malloc as well 

    .... 

} 

이전에 보여드렸던 예제와 크게 다른 점은 없습니다.

프로그램이 시작할 때( 혹은 각 스레드 엔트리의 처음에서) new handler를 설치해야합니다.

그리고 _set_new_mode(1); 을 호출함으로써 malloc 역시 new 와 같이 동작하다록 만들 수 있습니다.

보너스로 Exception을 잡으실때(catch) 유의하실 점을 몇가지 적어보겠습니다.

1. Non-MFC C++ exception 이라면 reference 를 사용하시는 게 좋습니다.

이렇게 말이죠.

try { 

    throw MyException(); 

} 

catch(MyException& e) 

{ 

} 

이유는 간단합니다. 포인터를 사용한다면 객체를 동적으로 생성/소멸 시키는 루틴이 부가적으로 포함되어야 하기 때문에 안좋을테고, 그냥 MyException 을 사용한다면 추가적인 객체가 생성되고 복사생성자/소멸자가 추가적으로 호출될테니 비효율적이겠죠.

(참고적으로 dangling reference는 걱정하지 않으셔도 됩니다)


2. MFC exception 이라면 pointer를 사용해서 잡고, 반드시 Delete() 를 호출해주어야 합니다.

주의할 점으로는 절대 delete 를 사용해서 해제시켜서는 안됩니다.
exception이 static object인 경우도 있기 때문입니다.


3.예제



4.참고

Debuggin Windows Programs



- 2001.08.13 Smile Seo -

"C++" 카테고리의 다른 글
  • Advanced Breakpoint (0)2007/03/22
  • 동적으로 할당되는 메모리를 갖는 클래스를 위해서... (0)2007/03/21
  • exception 클래스 확장하기 (0)2007/03/21
  • operator new 와 operator delete 작성시 관례를... (0)2007/03/19
  • 메모리가 모자랄 경우에 대비한다 (0)2007/03/19
2007/03/21 09:31 2007/03/21 09:31
Posted by webdizen
Tags exception
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2711

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 538 539 540 541 542 543 544 545 546 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • VisualUnitTest++
  • Container
  • Safari3
  • 망각곡선
  • iPad
  • join
  • 집중
  • 연결연산자
  • 절전 모드
  • 우분투
  • 삼성
  • SHOW
  • 화장품
  • MP3 플레이어
  • Microformats
  • Recovery
  • 긍정
  • 여성
  • 병렬화
  • 난지원

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.