]>
git.saurik.com Git - wxWidgets.git/blob - samples/memcheck/memcheck.cpp
6468754414edfbd89ed48268adb3eaa72d504ee8
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Memory-checking sample
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows license
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
))