【发布时间】:2017-08-25 12:30:39
【问题描述】:
[EDIT] 错误出现在其他地方,@lite 帮我找到了,不需要更多答案
我的工厂类中有一个名为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;
}
有没有人经历过类似的事情?我读过这是实现这种工厂的正确方法。我也对设计更改持开放态度,只要我能以同样的方式抽象地使用基类上的方法。
【问题讨论】:
-
DeviceA构造函数里面有什么? -
请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。
-
如果有错误,你的函数会返回一个未初始化的指针。
-
目前我从来没有遇到过默认情况,所以我只是在我的问题中写了一个打印。感谢@litelite,我注意到 DeviceA 的构造函数包含对 DLL 函数的函数指针调用,我会检查是否是它
-
所以毕竟这是一个 LoadLibrary 调用,由于某种原因没有返回 dll 句柄我会调查,再次感谢您的参与
标签: c++ visual-studio oop pointers factory