내가 Refbase.h, Refbase.cpp 강한 포인터의 안드로이드 구현에서 StrongPointer.h안드로이드 네이티브 강력한 포인터 :: shared_ptr의
말하는 겁니다, 어떤 강한 포인터 기반의 객체는 상속 할 필요가 refbase 즉
sp<TheClass> theObj // TheClass must inherit from class RefBase
이 요구 사항은 sp
의 방법 중 하나의 코드에서 볼 수있다 :
template<typename T> sp<T>& sp<T>::operator =(T* other) {
if (other != NULL) {
other->incStrong(this);
}
if (mPtr != NULL) {
mPtr->decStrong(this);
}
mPtr = other;
return *this;
}
에서 incStrong
또는 decStrong
에 대한 호출 주문이 실패하지 않도록하십시오. . . other
및 mPtr
는 RefBase
을 상속해야합니다
질문
왜 sp
이 구현 등이 관리는 가을 필요 년대 obj가 RefBase
의 자녀가 될 것을? 컴파일 타임이나 심지어 런타임에서도이 요구 사항을 시행 할 방법조차 없습니다. (글쎄, 아마 if(type()...
) 더 생각하면
Std library doesn't have such a requirement
...
이 유연성을 제공하는 대답은?
예인 경우 어떻게 유연성을 제공합니까?
당신의 예제가'shared_ptr'에 대해 합당한가? [할당 연산자는 특별한 포인터 만 취합니다.] (http://www.cplusplus.com/reference/memory/shared_ptr/operator=/) 클래스'sp'의 경우 ** 할당은 ** 합법입니다. – Adrian
할당 연산자가 표시되지 않습니다. 초기화를 보여 줬습니다. shared_ptr을 사용하여 과제를하려면 'pFoo = shared_ptr (new Foo (bar));' –
... '이 있어야하며 이는 침입 포인터의 또 다른 이점입니다. (그리고 당신은'shared_from_this'와 함께 바보 같은 게임을 할 필요가 없습니다). –