To będzie "działać" (ale patrz niżej):
activeInstance.reset(this);
Problem polega na tym, co robi to znaczy? Gdy activeInstance
wykracza poza zakres, this
będzie delete
d. To może nie być to, czego chcesz. Należy również przeczytać o enable_shared_from_this
, który pozwoliłby Ci powiedzieć:
activeInstance = shared_from_this();
Inną opcją jest użycie „zerowej Deleter”, czyli określenie funkcji Deleter który nic nie robi:
void NoDelete(void*) {}
activeInstance.reset(this, NoDelete);
W wielu przypadkach będzie to bezpieczne i poprawne rozwiązanie, zakładając, że this
zostanie usunięte przez inną metodę w innym miejscu, a nie przed ostatnim dereferencją activeInstance
.
możliwy duplikat [Utwórz doładowanie :: współdzielone \ _ptr do istniejącej zmiennej] (http://stackoverflow.com/questions/8466459/create-a-boostshared-ptr-to-an-isting-variable) – timrau
Używa on 'std :: shared_ptr', więc niektóre semantyki mogą się różnić. –