JNIpp 1.0
JNI meets C++
java::ObjectPointer< ObjectType > Class Template Reference

Smart pointer for classes derived from Object. More...

Inheritance diagram for java::ObjectPointer< ObjectType >:
jni::AbstractObject

List of all members.

Public Member Functions

 ObjectPointer (ObjectType *object=0)
 Constructs pointer with object; by default constructs empty pointer.
template<class OtherObjectType >
 ObjectPointer (OtherObjectType *object)
 Constructs pointer with object derived from to ObjectType.
 ObjectPointer (const ObjectPointer< ObjectType > &other)
 Copy-constructor.
template<typename OtherObjectType >
 ObjectPointer (const ObjectPointer< OtherObjectType > &other)
 Copy-constructor that takes pointer to derived object.
virtual ~ObjectPointer ()
 Destructor; calls Reset().
void Swap (ObjectPointer< ObjectType > &other)
 Swaps content with another pointer.
void Reset ()
 Resets object pointer: releases and nulls contained object.
ObjectType * Detach ()
 Detaches contained object.
ObjectType * Get () const
 Returns contained object.
ObjectType * operator-> () const
 Returns contained object.
ObjectType & operator* () const
 Returns reference to the contained object.
 operator const UnknownObject * () const
 Helper operator, allows for testing and comparing object pointers.
bool operator! () const
 Tests whether object pointer is empty.
ObjectPointer< ObjectType > & operator= (const ObjectPointer< ObjectType > &other)
 Assignment operator.
template<typename OtherObjectType >
ObjectPointer< ObjectType > & operator= (const ObjectPointer< OtherObjectType > &other)
 Assignment operator for types derived from ObjectType.
virtual jobject GetJObject () const
 Returns Java object that is contained in this pointer's object, or NULL if the pointer is empty.

Static Public Member Functions

static ObjectPointer< ObjectType > New (...)
 Instantiates ObjectType and wraps it into ObjectPointer.
static ObjectPointer< ObjectType > Wrap (const jni::LObject &object)
 Creates object pointer from local object.
static ObjectPointer< ObjectType > Wrap (jobject object)
 Creates object pointer from java object.

Detailed Description

template<typename ObjectType>
class java::ObjectPointer< ObjectType >

Smart pointer for classes derived from Object.

ObjectPointer adds a reference (Object::Retain()) to the object in constructor and releases (Object::Release()) in destructor. You must use this class because all JNIpp library is build around it (for example java::Cast() returns it).

ObjectPointer is derived from jni::AbstractObject, so you can (and in fact should) pass it to jni functions by value.

The next most useful thing is ObjectPointer::Wrap() method which wraps jni::LObject into ObjectType. That method works for both wrapper and live classes:

ObjectPointer also features ObjectPointer::New() method which creates ObjectType object and wraps it into ObjectPointer in one call. Compare:

ObjectPointer supports the following usages:

  • if (objectPtr)
  • if (!objectPtr)
  • if (objectPtr1==objectPtr2)
  • if (objectPtr1!=objectPtr2)
Examples:

EmailValidator.cpp, EmailValidator.h, LiveThread.cpp, LiveThread.h, NativeSound.cpp, and NativeSound.h.


Constructor & Destructor Documentation

template<typename ObjectType >
java::ObjectPointer< ObjectType >::ObjectPointer ( ObjectType *  object = 0)

Constructs pointer with object; by default constructs empty pointer.

Method calls Object::Retain() on object.

template<typename ObjectType >
template<class OtherObjectType >
java::ObjectPointer< ObjectType >::ObjectPointer ( OtherObjectType *  object)

Constructs pointer with object derived from to ObjectType.

Method calls Object::Retain() on object.


Member Function Documentation

template<typename ObjectType >
ObjectType* java::ObjectPointer< ObjectType >::Detach ( )

Detaches contained object.

Nulls and returns contained object. NOTE: don't forget to call Object::Release() on returned object.

template<typename ObjectType >
ObjectType& java::ObjectPointer< ObjectType >::operator* ( ) const

Returns reference to the contained object.

NOTE: make sure that object pointer contains non-NULL object before calling this method.

template<typename ObjectType >
static ObjectPointer<ObjectType> java::ObjectPointer< ObjectType >::Wrap ( const jni::LObject object) [static]

Creates object pointer from local object.

No type checks are performed, you should make sure you are wrapping correct object.

Examples:
LiveThread.cpp, and NativeSound.cpp.
template<typename ObjectType >
static ObjectPointer<ObjectType> java::ObjectPointer< ObjectType >::Wrap ( jobject  object) [static]

Creates object pointer from java object.

No type checks are performed, you should make sure you are wrapping correct object.