git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52096 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			72 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        container.h
 | 
						|
// Purpose:     topic overview
 | 
						|
// Author:      wxWidgets team
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Licence:     wxWindows license
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
/*!
 | 
						|
 | 
						|
 @page overview_container Container classes overview
 | 
						|
 | 
						|
 Classes: wxList<T>, wxArray<T>, wxVector<T>
 | 
						|
 | 
						|
 wxWidgets uses itself several container classes including doubly-linked lists
 | 
						|
 and dynamic arrays (i.e. arrays which expand automatically when they become
 | 
						|
 full). For both historical and portability reasons wxWidgets does not use STL 
 | 
						|
 which provides the standard implementation of many container classes in C++.
 | 
						|
 | 
						|
 First of all, wxWidgets has existed since well before STL was written, and
 | 
						|
 secondly we don't believe that today compilers can deal really well with all of
 | 
						|
 STL classes (this is especially true for some less common platforms). Of
 | 
						|
 course, the compilers are evolving quite rapidly and hopefully their progress
 | 
						|
 will allow to base future versions of wxWidgets on STL - but this is not yet
 | 
						|
 the case.
 | 
						|
 | 
						|
 wxWidgets container classes don't pretend to be as powerful or full as STL
 | 
						|
 ones, but they are quite useful and may be compiled with absolutely any C++
 | 
						|
 compiler. They're used internally by wxWidgets, but may, of course, be used in
 | 
						|
 your programs as well if you wish.
 | 
						|
 | 
						|
 The list classes in wxWidgets are doubly-linked lists which may either own the
 | 
						|
 objects they contain (meaning that the list deletes the object when it is
 | 
						|
 removed from the list or the list itself is destroyed) or just store the
 | 
						|
 pointers depending on whether you called or not wxList::DeleteContents method.
 | 
						|
 | 
						|
 Dynamic arrays resemble C arrays but with two important differences: they
 | 
						|
 provide run-time range checking in debug builds and they automatically expand
 | 
						|
 the allocated memory when there is no more space for new items. They come in
 | 
						|
 two sorts: the "plain" arrays which store either built-in types such as "char",
 | 
						|
 "int" or "bool" or the pointers to arbitrary objects, or "object arrays" which
 | 
						|
 own the object pointers to which they store.
 | 
						|
 | 
						|
 For the same portability reasons, the container classes implementation in wxWidgets
 | 
						|
 does not use templates, but is rather based on C preprocessor i.e. is done with
 | 
						|
 the macros: @e WX_DECLARE_LIST and @e WX_DEFINE_LIST for the linked
 | 
						|
 lists and @e WX_DECLARE_ARRAY, @e WX_DECLARE_OBJARRAY and @e WX_DEFINE_OBJARRAY for
 | 
						|
 the dynamic arrays. 
 | 
						|
 | 
						|
 The "DECLARE" macro declares a new container class containing the elements of 
 | 
						|
 given type and is needed for all three types of container classes: lists, 
 | 
						|
 arrays and objarrays. The "DEFINE" classes must be inserted in your program 
 | 
						|
 in a place where the @b full declaration of container element class is in scope 
 | 
						|
 (i.e. not just forward declaration), otherwise destructors of the container 
 | 
						|
 elements will not be called! 
 | 
						|
 | 
						|
 As array classes never delete the items they contain anyhow, there is
 | 
						|
 no WX_DEFINE_ARRAY macro for them.
 | 
						|
 | 
						|
 Examples of usage of these macros may be found in wxList and wxArray documentation.
 | 
						|
 | 
						|
 Finally, wxWidgets predefines several commonly used container classes. wxList
 | 
						|
 is defined for compatibility with previous versions as a list containing
 | 
						|
 wxObjects and wxStringList as a list of C-style strings (char *), both of these
 | 
						|
 classes are deprecated and should not be used in new programs. The following
 | 
						|
 array classes are defined: wxArrayInt, wxArrayLong, wxArrayPtrVoid and
 | 
						|
 wxArrayString. The first three store elements of corresponding types, but
 | 
						|
 wxArrayString is somewhat special: it is an optimized version of wxArray which
 | 
						|
 uses its knowledge about wxString reference counting schema.
 | 
						|
 | 
						|
*/
 |