2017-08-25 29 views
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; 
} 

有沒有人經歷過類似的事情?我讀過這是實施這種工廠的正確方法。我也打開設計更改,只要我可以以相同的方式抽象地使用基類上的方法。

+4

'DeviceA'構造函數裏面有什麼? – litelite

+1

請嘗試創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們顯示。 –

+3

如果出現錯誤,您的函數將返回一個未初始化的指針。 –

回答

0

你還應該用nullptr初始化ret。