2014-03-04 52 views
-1

所以我有這些基類和子類。對象未刪除C++?

#include <iostream> 

class BaseDevice 
{ 
public: 
    int _pin; 
    BaseDevice() { std::cout << "base constructor\n"; } 
    virtual void read() = 0; 
    virtual ~BaseDevice() { printf("destroyed base\n"); } 
    void debugThis() { printf("debug %i \n", _pin); } 
}; 


class Morse : public BaseDevice 
{ 
public: 
    Morse(int pin) : BaseDevice() { _pin = pin; } 
    ~Morse() { printf("destroyed morse\n");} 

    void read() { std::cout << "read"; } 

private: 

}; 

int main() 
{ 

    BaseDevice *morse[5]; 

    morse[0] = new Morse(13); 
    morse[0]->debugThis(); 
    morse[1] = new Morse(6); 
    morse[1]->debugThis(); 
    delete morse[1]; 
    morse[1]->debugThis(); 

    return 0 
} 

所以,當我刪除莫爾斯[1],它說,它摧毀了「莫氏」 &「baseDevice」 ......但是,當我叫莫爾斯[1] - > debugThis()後立即刪除,它仍然打印出來_pin = 6,所以對象指針仍然存在。它沒有被刪除/銷燬?

+0

你爲什麼混合'std :: cout'和'printf'? – crashmstr

回答

4

它被破壞,你遇到未定義的行爲 - 任何事情都可能發生。

在您致電delete後,訪問指針已不再合法。

1

通常刪除或釋放內存並不意味着系統會將零或一些垃圾值放在那裏。這意味着系統將在進一步的分配中重用該內存。所以刪除後內容仍然存在。所以會出現相同的輸出。