Je fais référence à Refbase.h, Refbase.cpp et StrongPointer.hpointeur fort natif Android vs std :: shared_ptr
Dans la mise en œuvre Android du pointeur fort, un objet à base forte pointeur doit hériter refbase-à-dire
sp<TheClass> theObj // TheClass must inherit from class RefBase
Cette exigence peut être vu dans le code pour l'une des méthodes de 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;
}
en commande pour appel à incStrong
ou decStrong
pour ne pas échouer. . . other
et mPtr
doit avoir hérité RefBase
QUESTION
Pourquoi sp
mis en œuvre de telle sorte que l'obj qu'il est nécessaire de gérer est d'être un enfant de RefBase
? Il n'y a même pas moyen de faire respecter cette exigence lors de la compilation ou même de l'exécution. (Eh bien peut-être if(type()...
)
Std library doesn't have such a requirement
...
Une fois encore la pensée, est la réponse que cette offre une flexibilité?
Si oui, comment cela offre-t-il de la flexibilité?
Etes-vous sûr que votre exemple est légal pour 'shared_ptr'? [L'opérateur d'affectation ne prend que des pointeurs spéciaux.] (Http://www.cplusplus.com/reference/memory/shared_ptr/operator=/) Pour class'sp', cette affectation ** est ** légale. – Adrian
Je ne montre pas d'opérateur d'affectation - J'ai montré une initialisation. Si vous voulez faire une affectation avec shared_ptr, il faudrait que ce soit: 'pFoo = shared_ptr (nouveau Foo (bar));' –
... et c'est l'autre avantage d'un pointeur intrusif. (et vous n'avez pas à jouer à des jeux stupides avec 'shared_from_this'). –