2012-11-01 41 views
1

我有一個簡單的問題:異常處理和成員變量

如果我們有一個已動態分配的成員(或使用動態分配成員)的類,我們經常使用該成員是什麼來處理一些最好的辦法操作失敗的成員。
Ofc有嘗試趕上,但林沒有談論這一點。

1) 林談論的事實,現在的成員是在狀態時,它不應該是(這裏我不是在談論泄漏資源而言,我談論的例子,我們要的push_back 100元到std的事實: :矢量,但我們只加了47)。

現在,例如,當我們調用其他方法sendToDB時,我們將向數據庫發送47個而不是100個項目。 我對解決問題的猜測是在所有公共方法上都有bool返回值(嘗試全部或全部爲all)(如果我們設法推100,則返回false,如果推0,則返回false。

2) 但是,這仍然留下了動態分配成員(例如shared_ptr)的問題。 這是否意味着每一個使用它必須這樣做方法:

bool MyClass::sendDataToDB() 
{ 
    if (! m_DBConnection) //m_DBConnection is std::shared_ptr 
    return false; 
    //... 


} 
+1

停止竊取我的身份。 (\ /)(; ,,;)(\ /) – 2012-11-01 09:42:16

+5

我很難理解這個問題,但會提到基本的,強大的,而不是保證回答你的問題? –

+0

@ R.MartinhoFernandes否,因爲AFAIK他們處理異常發生的地方,我在談論這個:簡單的例子m_myStruct = new MyStruct(42);拋出所有好...但在其他一些公共成員函數中,你正在使用m_myStruct(這是我Q的第二部分)。首先是如何「記住」前期發生。 – NoSenseEtAl

回答

1

我不完全理解你的問題,但我得到這個:

在你的類,你有一個存儲(東西像vector),然後你想插入一些東西,操作可能會失敗的中間。所以你想知道插入失敗還是操作完成!我對嗎?如果答案是肯定的,我認爲對此的最佳解決方案就像iostream那樣設置fail狀態以防發生故障,您可以稍後檢查或可以throw exception,但在任何情況下,設置fail位都可以發信號通知我的對象是處於失敗狀態

+0

是的,我的問題主要是關於程序如何「記住」某些事情失敗。 – NoSenseEtAl

+0

所以我認爲你的Q的設計應該像'std :: iostream'! – BigBoss

+0

啊,但仍然留下問題的第二部分...我是否檢查每個方法條目,如果im處於失敗狀態,如果是的話返回false;或拋出......看起來很難看,但tbh我不能想到更好的 – NoSenseEtAl