Questions tagged [exception-safety]
93 questions
                    
                    49
                    
            votes
                
                4 answers
            
        What is wrong with "checking for self-assignment" and what does it mean?
In Herb Sutter's book Exceptional C++ (1999), he has words in item 10's solution:
"Exception-unsafe" and "poor design" go hand in hand. If a piece of code isn't exception-safe, that's generally okay and can simply be fixed. But if a piece of code…
         
    
    
        Jimm Chen
        
- 3,411
- 3
- 35
- 59
                    48
                    
            votes
                
                14 answers
            
        The simplest and neatest c++11 ScopeGuard
I'm attempting to write a simple ScopeGuard based on Alexandrescu concepts but with c++11 idioms. 
namespace RAII
{
    template< typename Lambda >
    class ScopeGuard
    {
        mutable bool committed;
        Lambda rollbackLambda; 
       …
         
    
    
        lurscher
        
- 25,930
- 29
- 122
- 185
                    31
                    
            votes
                
                7 answers
            
        Ensuring that Exceptions are always caught
Exceptions in C++ don't need to be caught (no compile time errors) by the calling function. So it's up to the developer's judgment whether to catch them using try/catch (unlike in Java).
Is there a way one can ensure that the exceptions thrown are…
         
    
    
        sachin
        
- 1,141
- 2
- 16
- 21
                    28
                    
            votes
                
                2 answers
            
        std::make_shared() change in C++17
In cppref, the following holds until C++17:
code such as f(std::shared_ptr(new int(42)), g()) can cause a
  memory leak if g gets called after new int(42) and throws an
  exception, while f(std::make_shared(42), g()) is safe, since
  two…  
         
    
    
        Lingxi
        
- 14,579
- 2
- 37
- 93
                    27
                    
            votes
                
                2 answers
            
        Safety of std::unordered_map::merge()
While writing some code targeting C++17, I kind of hit a stumbling block determining the exception-safety of an operation merging two compatible std::unordered_maps. Per the current working draft, §26.2.7, table 91 reads, in part, regarding the…
         
    
    
        Capital C
        
- 271
- 2
- 5
                    27
                    
            votes
                
                3 answers
            
        Where can I find all the exception guarantees for the Standard Containers and Algorithms?
Yes, I've looked at the C++ standards that I could find (or the drafts), but I'm not finding any comprehensive of the exception guarantees given by STL containers. All I can find are occasional sections with incomplete descriptions on some of the…
         
    
    
        user541686
        
- 205,094
- 128
- 528
- 886
                    22
                    
            votes
                
                2 answers
            
        Are deferred functions called when calling log.Fatalln?
db, err := sql.Open("postgres", "…")
if err != nil {
    log.Fatalln(err)
}
defer db.Close()
tpl, err := template.ParseGlob("")
if err != nil {
    log.Fatalln(err)
}
If template.ParseGlob("") returns an error, is db.Close() still being called?
        user142019
                    22
                    
            votes
                
                1 answer
            
        Is it safe to use emplace_back with a container of unique_ptrs?
Consider the following:
std::vector> ptrsToInts;
ptrsToInts.emplace_back(new int);
If reallocation occurs in the vector, and that fails (throwing std::bad_alloc), am I "safe" or will I leak an int?
C++11 23.3.6.5… 
         
    
    
        Billy ONeal
        
- 104,103
- 58
- 317
- 552
                    20
                    
            votes
                
                4 answers
            
        Is there a C++ standard class to set a variable to a value at scope exit
Within the scope of a member function, I want to temporarly set a member variable to a certain value.
Then, when this function returns, I want to reset this member variable to a given known value.
To bo safe against exceptions and multiple returns,…
         
    
    
        Didier Trosset
        
- 36,376
- 13
- 83
- 122
                    20
                    
            votes
                
                3 answers
            
        Exception safety and make_unique
Just to clarify, using make_unique only adds exception safety when you have multiple allocations in an expression, not just one, correct? For example
void f(T*);
f(new T);
is perfectly exception safe (as far as allocations and stuff), while
void…
         
    
    
        Kal
        
- 1,309
- 11
- 16
                    18
                    
            votes
                
                1 answer
            
        Exception-safety of C++ implicitly generated assignment operator
My understanding is that C++ implicitly generated assignment operator does a member-wise copy (this seems confirmed also by this answer). But, if during a member copy an exception is thrown (e.g. because a resource for that member can't be…
         
    
    
        Mr.C64
        
- 41,637
- 14
- 86
- 162
                    12
                    
            votes
                
                2 answers
            
        Sink arguments and move semantics for functions that can fail (strong exception safety)
I have a function that operates on a big chunk of data passed in as a sink argument. My BigData type is already C++11-aware and comes with fully functional move constructor and move assignment implementations, so I can get away without having to…
         
    
    
        ComicSansMS
        
- 51,484
- 14
- 155
- 166
                    10
                    
            votes
                
                1 answer
            
        Memory leak during unordered_map::insert KeyEqual exception with GCC - breaking the strong exception safety guarantee?
I'm using GCC 7.3.1, but also tested on coliru, which I believe is version 9.2.0. Build with the following:
g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp
Here's rai.cpp:
#include 
#include 
int main()
{
    try
  …  
         
    
    
        Rai
        
- 1,328
- 11
- 20
                    10
                    
            votes
                
                1 answer
            
        How exception-safe is std::tie?
std::tie returns a tuple of references, so you can do the following:
int foo, bar, baz;
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3);
This is similar to foo, bar, baz = (1, 2, 3) in Python.
What is supposed to happen if one of the assignments…
        user142019
                    10
                    
            votes
                
                3 answers
            
        Exception safety regarding swap() operation - what's so wrong with that?
I keep reading that swap() operation, like this for example: 
template
void swap (T &a, T &b)
{
  T temp (a);
  a = b;
  b = temp;
}
is problematic when we are dealing with Exception-safety. 
What's so wrong with it? 
Furthermore, how can… 
         
    
    
        JAN
        
- 21,236
- 66
- 181
- 318