Predict the output of the below code snippet.
Output of the above program is “i = 3”.
Why the output is i= 3 and not 10?
While returning from a function, destructor is the last method to be executed. The destructor for the object “ob” is called after the value of i is copied to the return value of the function. So, before destructor could change the value of i to 10, the current value of i gets copied & hence the output is i = 3.
How to make the program to output “i = 10” ?
Following are two ways of returning updated value:
1) Return by Reference:
Since reference gives the l-value of the variable,by using return by reference the program will output “i = 10”.
The function foo() returns the l-value of the variable i. So, the address of i will be copied in the return value. Since, the references are automatically dereferened. It will output “i = 10”.
2. Create the object ob in a block scope
Since the object ob is created in the block scope, the destructor of the object will be called after the block ends, thereby changing the value of i to 10. Finally 10 will copied to the return value.
This article is compiled by Aashish Barnwal and reviewed by GeeksforGeeks team. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Destructors in C++
- C++ | Destructors | Question 1
- C++ | Destructors | Question 2
- C++ | Destructors | Question 3
- C++ | Destructors | Question 4
- C++ Interview questions based on constructors/ Destructors.
- How to iterate over the elements of an std::tuple in C++
- How to access private/protected method outside a class in C++
- lvalues references and rvalues references in C++ with Examples
- Difference between cout and std::cout in C++
- C++ program to check whether a String is a Pangram or not
- Difference between pair in Multiset and Multimap in C++ STL
- How does Volatile qualifier of C works in Computing System
- How to use unordered_map efficiently in C++