added wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING macro

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-11-30 16:31:19 +00:00
parent 21e0a4d5f1
commit b47f1f95f3
2 changed files with 44 additions and 0 deletions

View File

@@ -243,6 +243,7 @@ the corresponding topic.
\helpref{wxStringTokenize}{wxstringtokenize}\\ \helpref{wxStringTokenize}{wxstringtokenize}\\
\helpref{wxStripMenuCodes}{wxstripmenucodes}\\ \helpref{wxStripMenuCodes}{wxstripmenucodes}\\
\helpref{wxStrlen}{wxstrlen}\\ \helpref{wxStrlen}{wxstrlen}\\
\helpref{wxSUPPRESS\_GCC\_PRIVATE\_DTOR\_WARNING}{wxsuppress\_gcc\_private\_dtor\_warning}\\
\helpref{wxSysErrorCode}{wxsyserrorcode}\\ \helpref{wxSysErrorCode}{wxsyserrorcode}\\
\helpref{wxSysErrorMsg}{wxsyserrormsg}\\ \helpref{wxSysErrorMsg}{wxsyserrormsg}\\
\helpref{wxT}{wxt}\\ \helpref{wxT}{wxt}\\
@@ -3177,6 +3178,36 @@ as a keyboard shortkey in Windows and Motif) and $\backslash$t (tab in Windows).
<wx/utils.h> <wx/utils.h>
\membersection{wxSUPPRESS\_GCC\_PRIVATE\_DTOR\_WARNING}{wxsuppress\_gcc\_private\_dtor\_warning}\\
\func{}{wxSUPPRESS\_GCC\_PRIVATE\_DTOR\_WARNING}{\param{}{name}}
GNU C++ compiler gives a warning for any class whose destructor is private
unless it has a friend. This warning may sometimes be useful but it doesn't
make sense for reference counted class which always delete themselves (hence
destructor should be private) but don't necessarily have any friends, so this
macro is provided to disable the warning in such case. The \arg{name} parameter
should be the name of the class but is only used to construct a unique friend
class name internally. Example of using the macro:
\begin{verbatim}
class RefCounted
{
public:
RefCounted() { m_nRef = 1; }
void IncRef() { m_nRef++ ; }
void DecRef() { if ( !--m_nRef ) delete this; }
private:
~RefCounted() { }
wxSUPPRESS_GCC_PRIVATE_DTOR(RefCounted)
};
\end{verbatim}
Notice that there should be no semicolon after this macro.
\membersection{wxULL}\label{wxull} \membersection{wxULL}\label{wxull}
\func{wxLongLong\_t}{wxULL}{\param{}{number}} \func{wxLongLong\_t}{wxULL}{\param{}{number}}

View File

@@ -88,6 +88,19 @@
# pragma warn -inl /* Functions containing reserved words and certain constructs are not expanded inline */ # pragma warn -inl /* Functions containing reserved words and certain constructs are not expanded inline */
#endif /* __BORLANDC__ */ #endif /* __BORLANDC__ */
/*
g++ gives a warning when a class has private dtor if it has no friends but
this is a perfectly valid situation for a ref-counted class which destroys
itself when its ref count drops to 0, so provide a macro to suppress this
warning
*/
#ifdef __GNUG__
# define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name) \
friend class wxDummyFriendFor ## name;
#else /* !g++ */
# define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name)
#endif
/* ---------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------- */
/* wxWidgets version and compatibility defines */ /* wxWidgets version and compatibility defines */
/* ---------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------- */