工厂方法中的访问冲突

Access violation in factory method

本文关键字:访问冲突 方法 工厂      更新时间:2023-10-16

[编辑]错误在其他地方,因为@litelite帮助我找到了,不需要更多答案

我的工厂类中有名为MakeDevice的工厂方法,它返回指向基类对象的指针(但实际上指向其中一个子类的对象,具体取决于条件(。

执行程序时,我收到 xC0000005:访问冲突错误。Visual Studio 调试器停止的行如下所示:

ret = new DeviceA;

法典: 基类是 BaseDevice,两个子类是 DeviceA 和 DeviceB。DeviceModel 是一种枚举类型,以使其更容易。

BaseDevice *DeviceFactory::MakeDevice(DeviceModel model) {
BaseClass *ret;
switch(model) {
case model_deviceA:
ret = new DeviceA;    // debugger stops here
break;
case model_deviceB:
ret = new DeviceB;
break;
default:
printf("error");
break;
}
return ret;
}

有没有人经历过类似的事情? 我读到这是实现这种工厂的正确方法。我也对设计更改持开放态度,只要我可以以相同的方式抽象地使用基类上的方法。

您还应该使用 nullptr 初始化 ret。