Talk:cpp/language/scope
From cppreference.com
Scope and object Lifetime
Below is a proposed code example demonstrating the effect of scope on object lifetime. Modification of current code in the destructor article.
This isn't a comprehensive list, but it does demonstrate the unnoticed side effects of plain old scope brackets.
Run this code
#include <iostream>
struct A
{
int i;
A ( int i ) : i ( i )
{
std::cout << "Calling Constructor:\t a" << i << '\n';
}
~A()
{
std::cout << "Calling Destructor:\t a" << i << '\n';
}
};
A a0(0); //In global scope. Construted first, destroyed last
void ScopeTest1()
{
A a1(1); //a1 in function scope. Destroyed on exiting function scope
A* p; //Pointer only. No object contructed yet.
{ // nested scope
A a2(2); //a2 in nested scope. Destroyed at end of current scope
{//further nested scope
A a3(3); //a3 Destroyed at end of this scope
} //a3 out of scope
{//further nested scope
A a4(4); //a4 Destroyed at end of this scope
A a5(5); //a5 Destroyed at end of this scope
} //a4 out of scope
p = new A(6); //a5 created on heap. Infinite lifetime until destroyed by call to delete.
} // a2 out of scope
delete p; // calls the destructor of a5
} //a1 out of scope. //p out of scope (But a5)
void f(){
std::cout << "Calling f()" << std::endl;
}
int main(){
ScopeTest1();
std::cout << std::endl;
f(),A(7),f(),f(); //Statement scope. Unnamed instance destroyed at end of statement
A a8(8);
{
A& a9 = a8; //References and pointers fall out of scope
A* a10 = &a8; //but underlying object not deleted
}
return 0;
}
Output:
Calling Constructor: a0
Calling Constructor: a1
Calling Constructor: a2
Calling Constructor: a3
Calling Destructor: a3
Calling Constructor: a4
Calling Constructor: a5
Calling Destructor: a5
Calling Destructor: a4
Calling Constructor: a6
Calling Destructor: a2
Calling Destructor: a6
Calling Destructor: a1
Calling f()
Calling Constructor: a7
Calling f()
Calling f()
Calling Destructor: a7
Calling Constructor: a8
Calling Destructor: a8
Calling Destructor: a0
Link to undefined term
class-head links to Classes but the term doesn't occur there.