所以我有这些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.所以对象指针仍然存在。它没有删除/销毁?
答案 0 :(得分:4)
它被破坏了,你正在遇到未定义的行为 - 任何事情都可能发生。
致电delete
后,访问指针已不再合法。
答案 1 :(得分:1)
通常删除或释放内存并不意味着系统会在那里放置零或一些垃圾值。这意味着系统将在进一步分配中重用该内存。所以在删除内容后仍然存在。因此出现相同的输出。