C++程序  |  42行  |  859 B

#include <memory>

#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT)

// #include <typeinfo>
#include "cppunit/cppunit_proxy.h"

#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
using namespace std;
#endif

class SharedPtrTest :
    public CPPUNIT_NS::TestCase
{
    CPPUNIT_TEST_SUITE(SharedPtrTest);
    CPPUNIT_TEST(shared_from_this);
    CPPUNIT_TEST_SUITE_END();

  protected:
    void shared_from_this();
};

CPPUNIT_TEST_SUITE_REGISTRATION(SharedPtrTest);

struct X;

struct X :
    public std::tr1::enable_shared_from_this<X>
{
};

void SharedPtrTest::shared_from_this()
{
  std::tr1::shared_ptr<X> p( new X );
  std::tr1::shared_ptr<X> q = p->shared_from_this();

  CPPUNIT_CHECK( p == q );
  CPPUNIT_CHECK( !(p < q) && !(q < p) ); // p and q share ownership
}

#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */