What does the C++ standard mean regarding object lifetime begins?

前端 未结 3 1418
滥情空心
滥情空心 2021-01-27 11:40

In the n3690 C++ standard in section 3.8.1 there is this text:

The lifetime of an object of type T begins when:
— storage with the proper alignment and size for          


        
相关标签:
3条回答
  • 2021-01-27 11:50

    when constructor body has finished running

    This. An object that throws during construction is not guaranteed to have its invariants established, hence its lifetime doesn't start. A consequence of this is that the destructor will not get called:

    #include <iostream>
    
    struct Stillborn
    {
        Stillborn()
        {
            std::cout << "inside constructor\n";
            throw 42;
        }
    
        ~Stillborn()
        {
            std::cout << "inside destructor\n";
        }
    };
    
    int main()
    {
        try
        {
            Stillborn x;
        }
        catch (...)
        {
            std::cout << "inside catch block\n";
        }
    }
    

    live demo. Note how "inside destructor" does not appear in the output.

    0 讨论(0)
  • 2021-01-27 11:55

    12.6.2, [class.base.init], item 6, lists the steps of initialization, and this is the final one:

    Finally, the compound-statement of the constructor body is executed.

    So once the body has executed, initialization is complete.

    0 讨论(0)
  • 2021-01-27 12:01

    There is a note:

    "[ Note: initialization by a trivial copy/move constructor is non-trivial initialization. — end note ]"

    It means when the trivial constructor will finish its execution.

    0 讨论(0)
提交回复
热议问题