Obecnie studiuję COM i następujący kod myli mnie.W jaki sposób metoda członka może usunąć obiekt?
STDMETHODIMP _(ULONG) ComCar::Release()
{
if(--m_refCount==0)
delete this; // how could this "suicide" deletion be possible?
return m_refCount;
}
Zastanawiam się, w jaki sposób można usunąć instancję obiektu w ramach metody jego elementu? Więc zrobiłem następujący eksperyment:
class A
{
public:
void Suicide(void);
void Echo(void);
char name;
};
void A::Echo(void)
{
::printf("echo = %c\n",name);
}
void A::Suicide(void)
{
delete this;
}
int main(void)
{
A a;
a.name='a';
a.Suicide(); //failed
}
a wykonanie nie powiodło się w a.Suicide(). Raport debugowania zawierał komunikat "Błąd augmentacji debugowania". Czy ktoś mógłby rzucić trochę światła na mnie? Ponieważ jestem całkowicie początkującym na COM.
Podobnym wątek jest tutaj: Question about COM Release() method
Prosta naprawa to oczywiście powrót do 0. – GManNickG
Dzięki, Michael, odkąd wspomniałeś o "dynamicznej alloacacji", zgaduję, czy istnieje coś przeciwnego "statycznej alloacacji"? co to jest i jaka jest różnica? może trudno to wytłumaczyć jednym słowem. Czy możesz podać mi jakieś odniesienia do dalszych badań? Wielkie dzięki. : D – smwikipedia
@GMan: Chcę tylko wyjaśnić, co masz na myśli: 'if (--m_refCount == 0) {usuń to; return 0; } return m_refCount; '. Nie możesz po prostu zmienić instrukcji return na 'return 0;'. – Dan