📄 reeves.htm
字号:
<A NAME="AUTO00148"></A><UL><PRE>
const long null = 0L; // see <SCRIPT>sendmetoo(25,6292,'E');</SCRIPT> ONMOUSEOVER = "self.status = 'Item E25'; return true" ONMOUSEOUT = "self.status = self.defaultStatus">Item E25</A> for a discussion
// of this approach
</PRE>
</UL>
<A NAME="AUTO00017"></A>
<A NAME="dingp27"></A><LI>I have adopted a commenting convention of <CODE>//>x</CODE> to indicate places in a function where exceptions are possible. Like any manual approach, this technique is error prone and very likely to miss something. It is better than nothing, however, and I have found it useful.<SCRIPT>create_link(27);</SCRIPT>
</OL>
<P><A NAME="dingp28"></A><A NAME="AUTO00018"></A>The following table summarizes the goals and guidelines that are presented in the next <NOBR>section.<SCRIPT>create_link(28);</SCRIPT>
</NOBR></P>
<A NAME="AUTO00019"></A>
<TABLE ALIGN="center" WIDTH="95%" CELLSPACING="2" CELLPADDING="2" BGCOLOR="#FFFFCC" BORDER="0">
<TR><TH COLSPAN="2" BGCOLOR="#000000"><FONT COLOR="#FFFFFF" FACE="Arial">Table: Goals and Guidelines</FONT></TH></TR>
<TR>
<TD VALIGN="top"><B><a name="dingp29"></a><a href="./REEVES.HTM#goal1">I.</a></B></TD>
<TD><B>When you propagate an exception, try to leave the object in the state it had when the function was entered.</B><SCRIPT>create_link(29,'#FFFFCC');</SCRIPT>
<OL VALUE="1">
<A NAME="dingp30"></A>
<LI> <a href="./REEVES.HTM#guide1">Make sure your <CODE>const</CODE> functions really
are <CODE>const</CODE>.</a><SCRIPT>create_link(30,'#FFFFCC');</SCRIPT></nobr>
<A NAME="AUTO00020"></A>
<A NAME="dingp31"></A>
<LI> <a href="./REEVES.HTM#guide2">Perform exception prone operations early, and/or
through temporaries.</a><SCRIPT>create_link(31,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00021"></A>
<A NAME="dingp32"></A>
<LI> <a href="./REEVES.HTM#guide3">Watch out for side effects in expressions that
might propagate exceptions.</a><SCRIPT>create_link(32,'#FFFFCC');</SCRIPT>
<BR>
</OL></TD></TR>
<TR>
<TD VALIGN="top"><A NAME="dingp33"></A><B><a href="./REEVES.HTM#goal2">II.</a></B></TD>
<TD><B>If you can not leave the object in the same state it was in when the function was entered, try to leave it in a good state.</B><SCRIPT>create_link(33,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00022"></A>
<OL TYPE="1">
<A NAME="dingp34"></A>
<LI VALUE="4"> <a href="./REEVES.HTM#guide4">Either reinitialize the object, or mark
it internally to indicate that it is no longer usable but might be recovered.</a><SCRIPT>create_link(34,'#FFFFCC');</SCRIPT>
</OL>
<A NAME="AUTO00023"></A>
</TD></TR>
<TR>
<TD VALIGN="top"><A NAME="dingp35"></A><B><a href="./REEVES.HTM#goal3">III.</a></B></TD>
<TD><B>If you can not leave the object in a "good" state, make sure the destructor will still work.</B><SCRIPT>create_link(35,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00024"></A>
<OL TYPE="1">
<A NAME="dingp36"></A>
<LI VALUE="5"><a href="./REEVES.HTM#guide5">Do not leave dangling pointers in your
objects. Delete pointers through temporaries.</a><SCRIPT>create_link(36,'#FFFFCC');</SCRIPT>
</OL>
<A NAME="AUTO00025"></A>
</TD></TR>
<TR>
<TD VALIGN="top"><A NAME="dingp37"></A><B><a href="./REEVES.HTM#goal4">IV.</a></B></TD>
<TD><B>Avoid resource leaks.</B><SCRIPT>create_link(37,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00026"></A>
<OL TYPE="1">
<A NAME="AUTO00027"></A>
<A NAME="dingp38"></A>
<LI VALUE="6"><a href="./REEVES.HTM#guide6">If you have raw data pointers as members,
initialize them to null in the initializer list of your constructor(s),
then do necessary allocations in the constructor body where a catch
block can deal with potential resource leaks.</a><SCRIPT>create_link(38,'#FFFFCC');</SCRIPT>
</OL>
<A NAME="AUTO00028"></A>
</TD></TR>
<TR>
<TD VALIGN="top"><A NAME="dingp39"></A><B><a href="./REEVES.HTM#goal5">V.</a></B></TD>
<TD> <B>Do not catch any exception you do not have to.</B><SCRIPT>create_link(39,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00029"></A><P>
<OL TYPE="1">
<A NAME="AUTO00030"></A>
<A NAME="dingp40"></A>
<LI VALUE="7"><a href="./REEVES.HTM#guide7">Rewrite functions to preserve state, if
possible.</a><SCRIPT>create_link(40,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00031"></A>
<A NAME="dingp41"></A>
<LI VALUE="8"><a href="./REEVES.HTM#guide8">Always use a catch <CODE>(...)</CODE>
<CODE>block</CODE> to cope with propagating exceptions.</a><SCRIPT>create_link(41,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00032"></A>
<A NAME="dingp42"></A>
<LI VALUE="9"><a href="./REEVES.HTM#guide9">If you get stuck, call <CODE>terminate()</CODE>.</a><SCRIPT>create_link(42,'#FFFFCC');</SCRIPT>
</OL>
<A NAME="AUTO00033"></A>
</TD></TR>
<TR>
<TD VALIGN="top"><A NAME="dingp43"></A><B><a href="./REEVES.HTM#goal6">VI.</a></B></TD>
<TD><B> Do not hide exception information from other parts of the program that
might need it.</B><SCRIPT>create_link(43,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00034"></A>
<OL TYPE="1">
<A NAME="dingp44"></A>
<LI VALUE="10"> <a href="./REEVES.HTM#guide10">Always rethrow the exception caught
in a catch (<CODE>(...)</CODE> <CODE>block</CODE>).</a><SCRIPT>create_link(44,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00035"></A>
<A NAME="dingp45"></A>
<LI VALUE="11"> <a href="./REEVES.HTM#guide11">Rethrow a different exception only
to provide additional information or capability.</a><SCRIPT>create_link(45,'#FFFFCC');</SCRIPT>
<A NAME="AUTO00036"></A>
<A NAME="dingp46"></A>
<LI VALUE="12"> <a href="./REEVES.HTM#guide12">Make sure one catch <CODE>block</CODE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -