]>
git.saurik.com Git - wxWidgets.git/blob - samples/memcheck/memcheck.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Memory-checking sample 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  23 #include "wx/datetime.h" 
  25 #if !defined(__WXMSW__) && !defined(__WXPM__) 
  26     #include "../sample.xpm" 
  30 #error This program must be compiled in debug mode. 
  33 // Normally, new is automatically defined to be the 
  34 // debugging version. If not, this does it. 
  35 #if !defined(new) && defined(WXDEBUG_NEW) && wxUSE_MEMORY_TRACING && wxUSE_GLOBAL_MEMORY_OPERATORS 
  36 #define new WXDEBUG_NEW 
  39 // Define a new application type 
  40 class MyApp
: public wxApp
 
  45 // Define a new frame type 
  46 class MyFrame
: public wxFrame
 
  48     MyFrame(wxFrame 
*parent
); 
  49     void OnQuit(wxCommandEvent
& event
); 
  56 // `Main program' equivalent, creating windows and returning main app frame 
  57 bool MyApp::OnInit(void) 
  59   if ( !wxApp::OnInit() ) 
  62   // Create the main frame window 
  63   MyFrame 
*frame 
= new MyFrame((wxFrame 
*) NULL
); 
  66   frame
->SetIcon(wxICON(sample
)); 
  69   wxMenu 
*file_menu 
= new wxMenu
; 
  71   file_menu
->Append(wxID_EXIT
, wxT("E&xit")); 
  72   wxMenuBar 
*menu_bar 
= new wxMenuBar
; 
  73   menu_bar
->Append(file_menu
, wxT("File")); 
  74   frame
->SetMenuBar(menu_bar
); 
  76   // Make a panel with a message 
  77   wxPanel 
*panel 
= new wxPanel(frame
); 
  79   (void)new wxStaticText(panel
, wxID_ANY
, wxT("Hello, this is a minimal debugging wxWidgets program!"), wxPoint(10, 10)); 
  84 #if wxUSE_MEMORY_TRACING 
  85   wxDebugContext::SetCheckpoint(); 
  89   wxBrush
* brush 
= new wxBrush(*wxRED
); 
  90   wxBitmap
* bitmap 
= new wxBitmap(100, 100); 
  92   // non-object allocation 
  93   char *ordinaryNonObject 
= new char[1000]; 
  95   wxString 
*thing 
= new wxString
; 
  98   wxDateTime
* date 
= new wxDateTime
; 
  99 #endif // wxUSE_DATETIME 
 101   const char *data 
= (const char*) thing 
; 
 103 #if wxUSE_MEMORY_TRACING 
 104   // On MSW, Dump() crashes if using wxLogGui, 
 105   // so use wxLogStderr instead. 
 106   wxLog
* oldLog 
= wxLog::SetActiveTarget(new wxLogStderr
); 
 108   wxDebugContext::PrintClasses(); 
 109   wxDebugContext::Dump(); 
 110   wxDebugContext::PrintStatistics(); 
 112   // Set back to wxLogGui 
 113   delete wxLog::SetActiveTarget(oldLog
); 
 116   // Don't delete these objects, to force wxApp to flag a memory leak. 
 119 //  delete[] ordinaryNonObject; 
 124 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
) 
 125     EVT_MENU(wxID_EXIT
, MyFrame::OnQuit
) 
 128 // My frame constructor 
 129 MyFrame::MyFrame(wxFrame 
*parent
): 
 130   wxFrame(parent
, wxID_ANY
, wxT("MemCheck wxWidgets Sample"), wxDefaultPosition
, wxSize(400, 200)) 
 133 // Intercept menu commands 
 134 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))