2013-10-29 62 views
0

我想在類A構造函數中添加選項以從文件加載對象。但我不知道當加載失敗時文件加載失敗(文件加載失敗,文件格式不正確)。代碼使用A loadObjects是否爲真導致分段錯誤。也許在構造函數中加載不是最好的方法...從類構造函數中的文件加載失敗

template <typename T> 
class A 
{ 
    public: 
     A(const std::vector<Obj<T>*>& o) : objs(o) {} 

     A(const std::string& file) 
     { 
      // loadObject adds new objects in objs 
      // objs.push_back(new Obj<T>); 
      if (loadObjects(file, objs)) 
      { 
       // good, can use object A 
      } 
      else 
      { 
       // Segmentation fault when using undefined A, 
       // What can I do to stop execution here. 
      } 

     } 

     virtual ~A() 
     { 
      for (size_t i=0; i<objs.size(); ++i) 
       delete objs[i]; 
      objs.clear(); 
     } 

    private: 
     std::vector<Obj<T>*> objs; 

}; 
+0

也許只是輸出錯誤信息並退出? –

回答

1

只需使用throw。在這種情況下不會創建對象,您可以在其他級別上捕獲異常。

+0

我不知道如何捕捉執行,將研究它。謝謝。 – user2287453

1

創建一個函數initialize(),您可以在其中加載一個文件,然後在A的構造函數中調用它。此外,在使用類A的對象之前,請驗證此對象。所以在這種情況下,之後的操作將不會繼續。

A::A(const std::string& file) 
    { 
     if (initialize(const std::string& file) == SUCCESS) 
      .... 
     else 
      .... 
    } 

    void A::initialize(const std::string& file) 
    { 
     if (loadObjects(file, objs)) 
     { 
      // good, can use object A 
     } 
     else 
     { 
      // Segmentation fault when using undefined A, 
      // What can I do to stop execution here. 
     } 
    } 

然後當使用A的對象。

A obj("abc.txt"); 

    if (obj is valid) 
     do something; 
    else 
     return;