so don't use "new" in C++,
but it is the way to do in Java (everything is reference)

On Sat, Apr 17, 2010 at 10:41 PM, James Gregurich <[email protected]>wrote:

>
> You didn't understand. converting the exception isn't the issue....and you
> can certainly throw exceptions in catch blocks.
>
> The original email was itself an explanation of the problem. Let me provide
> a concrete example...
>
>
>     public static DbException convert(Throwable e) {
>         if (e instanceof DbException) {
>             return (DbException) e;
>         } else if (e instanceof SQLException) {
>             return new DbException((SQLException) e);   <<-----  problem
> here.
>
>
>
>
> I'm not exactly where what the java new operator does when the memory can't
> be allocated, but in C++, the new operator can throw std::bad_alloc in that
> case. Therefore, a simple-mindled translation of this code to C++ would set
> up a situation where another exception can be thrown while handling an
> exception. Therefore, one generally avoids allocating heap memory or doing
> anything else that could throw an exception while handling an exception.
> Also, throwing pointers to exceptions is avoided in C++ because there is no
> mechanism to guard the pointer to the exception and make sure it gets
> released.
>
>
> http://www.cplusplus.com/reference/std/new/bad_alloc/
>
>
> a good reference on best practices in C++ would be scott meyers' books:
>
> Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd
> Edition)<http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/ref=sr_1_1?ie=UTF8&s=books&qid=1271535816&sr=8-1>
> More Effective C++: 35 New Ways to Improve Your Programs and 
> Designs<http://www.amazon.com/More-Effective-Improve-Programs-Designs/dp/020163371X/ref=sr_1_4?ie=UTF8&s=books&qid=1271535816&sr=8-4>
>
>
>
> Because I can make meaningful recommendations on what needs to be done, I
> need to spend more time studying the system to see what the requirements
> are. However, as a basic, high-level goal... functions that handle
> exceptions should be no-throw except to convert an exception to an intended
> exception. In C++, orthodox practice is to throw by value and catch by
> reference.
>
>
> On Apr 17, 2010, at 10:14 AM, Thomas Mueller wrote:
>
> Hi,
>
> I'm not an expert in C++, but I guess it's legal to throw an exception
> in the catch block. Is it not? If not, could you provide a link?
>
> The reason this code is not proper
>
> form (aside from the fact that you are throwing a pointer)
>
>
> I don't understand. Could you provide a link? I read it's OK to throw
> Objects in C++ (that's what Java does):
> http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.6
>
> So, right in the middle of handling
>
> an exception, you can cause a new exception to be thrown that masks the
>
> actual exception.
>
>
> It's not masking, it's converting (to / from RuntimeException). There
> are no checked exceptions in C++, so this might not be required.
>
> standard practice in C++ is to throw classes and
>
> catch references to classes.
>
>
> Could you provide a link?
>
> Is redesigning the exception handling to flatten it out and make it all
>
> guaranteed no-throw a goal you'd be interested in?
>
>
> I'm not sure. What do you have in mind?
>
> Regards,
> Thomas
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<h2-database%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/h2-database?hl=en.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<h2-database%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/h2-database?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to