对象未删除C ++?

时间:2014-03-04 17:32:01

标签: c++

所以我有这些Base类和子类。

#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]时,它说它摧毁了“莫尔斯”&amp; 'baseDevice'...但是当我在删除后立即调用莫尔斯[1] - &gt; debugThis()时,它仍然打印出_pin = 6.所以对象指针仍然存在。它没有删除/销毁?

2 个答案:

答案 0 :(得分:4)

它被破坏了,你正在遇到未定义的行为 - 任何事情都可能发生。

致电delete后,访问指针已不再合法。

答案 1 :(得分:1)

通常删除或释放内存并不意味着系统会在那里放置零或一些垃圾值。这意味着系统将在进一步分配中重用该内存。所以在删除内容后仍然存在。因此出现相同的输出。