Add non-template wxWeakRef<T> constructor from T*.
We need a non-template ctor to make the code initializing wxWeakRef with literal NULL to compile. Closes #11916. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -211,6 +211,13 @@ public:
|
|||||||
// Default ctor
|
// Default ctor
|
||||||
wxWeakRef() { }
|
wxWeakRef() { }
|
||||||
|
|
||||||
|
// Ctor from the object of this type: this is needed as the template ctor
|
||||||
|
// below is not used by at least g++4 when a literal NULL is used
|
||||||
|
wxWeakRef(T *pobj)
|
||||||
|
{
|
||||||
|
Assign(pobj);
|
||||||
|
}
|
||||||
|
|
||||||
// When we have the full type here, static_cast<> will always work
|
// When we have the full type here, static_cast<> will always work
|
||||||
// (or give a straight compiler error).
|
// (or give a straight compiler error).
|
||||||
template <class TDerived>
|
template <class TDerived>
|
||||||
|
@@ -79,6 +79,10 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( WeakRefTestCase, "WeakRefTestCase" );
|
|||||||
void WeakRefTestCase::DeclareTest()
|
void WeakRefTestCase::DeclareTest()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
// Not initializing or initializing with NULL should work too
|
||||||
|
wxWeakRef<wxEvtHandler> wroDef;
|
||||||
|
wxWeakRef<wxEvtHandler> wro0(NULL);
|
||||||
|
|
||||||
wxObject o; // Should not work
|
wxObject o; // Should not work
|
||||||
wxEvtHandler eh;
|
wxEvtHandler eh;
|
||||||
wxObjectTrackable ot;
|
wxObjectTrackable ot;
|
||||||
@@ -123,6 +127,19 @@ void WeakRefTestCase::AssignTest()
|
|||||||
// Should be reset now
|
// Should be reset now
|
||||||
CPPUNIT_ASSERT( !wro1 );
|
CPPUNIT_ASSERT( !wro1 );
|
||||||
CPPUNIT_ASSERT( !wro2 );
|
CPPUNIT_ASSERT( !wro2 );
|
||||||
|
|
||||||
|
// Explicitly resetting should work too
|
||||||
|
wxEvtHandler eh;
|
||||||
|
wxObjectTrackable ot;
|
||||||
|
|
||||||
|
wro1 = &eh;
|
||||||
|
wro2 = &ot;
|
||||||
|
|
||||||
|
wro1 = NULL;
|
||||||
|
wro2 = NULL;
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT( !wro1 );
|
||||||
|
CPPUNIT_ASSERT( !wro2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
void WeakRefTestCase::AssignWeakRefTest()
|
void WeakRefTestCase::AssignWeakRefTest()
|
||||||
|
Reference in New Issue
Block a user