1
[編輯]錯誤是在其他地方如@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;
}
有沒有人經歷過類似的事情?我讀過這是實施這種工廠的正確方法。我也打開設計更改,只要我可以以相同的方式抽象地使用基類上的方法。
'DeviceA'構造函數裏面有什麼? – litelite
請嘗試創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們顯示。 –
如果出現錯誤,您的函數將返回一個未初始化的指針。 –