2012-11-01 35 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