binder 쪽에 보면 sp<IServiceManager> defaultServiceManager() 와 같이 정의가 되는데
sp<IServiceManager> 를 C++ 문법적으로 설명좀 부탁드립니다.
감사합니다.
-----------------------------------------------------------
sp<IServiceManager> defaultServiceManager()
{
if (gDefaultServiceManager != NULL) return gDefaultServiceManager;
{
AutoMutex _l(gDefaultServiceManagerLock);
if (gDefaultServiceManager == NULL) {
gDefaultServiceManager = interface_cast<IServiceManager>(
ProcessState::self()->getContextObject(NULL));
}
}
return gDefaultServiceManager;
}
-----------------------------------------------------------
----------------sp class 내용------------------
template <typename T>
class sp
{
public:
inline sp() : m_ptr(0) { }
sp(T* other);
sp(const sp<T>& other);
template<typename U> sp(U* other);
template<typename U> sp(const sp<U>& other);
~sp();
// Assignment
sp& operator = (T* other);
sp& operator = (const sp<T>& other);
template<typename U> sp& operator = (const sp<U>& other);
template<typename U> sp& operator = (U* other);
// Reset
void clear();
// Accessors
inline T& operator* () const { return *m_ptr; }
inline T* operator-> () const { return m_ptr; }
inline T* get() const { return m_ptr; }
// Operators
COMPARE(==)
COMPARE(!=)
COMPARE(>)
COMPARE(<)
COMPARE(<=)
COMPARE(>=)
private:
template<typename Y> friend class sp;
T* m_ptr;
};
------------------------------------------------------
탬플릿 문법을 안다고 해도, IServiceManager 클래스가 sp 클래스의 자료형으로 사용된다고 해도 해당 함수가 너무 난해 합니다., 또 어떻게 sp<IServiceManager>가 IServiceManager 클래스를 가르키는 포인터가 될 수 있는지 도무지 이해가 안 갑니다.
sp<>를 말씀하시는 것인지???
일단 sp는 smart pointer로 불리는 녀석입니다. 실제로는 strong pointer라고 불리는 듯 합니다만...간단하게 풀어쓰면
IServiceManager *aa = defaultServiceManager();
대략 이런식으로 이해하시면 됩니다.
단 여기서 aa라는 포인터는 delete를 안해도 되는 포인터라고 보시면 됩니다.