c++ - Locally declared object's internal memory intact outside scope? -


the function f1 creates instance of foo , sets foo.ptr[0] = 2.

#include <iostream> using namespace std;  class foo { public:         int *ptr;         inline foo(int a) {                 ptr = new int[a];         }         inline ~foo() {                 delete[] ptr;         } }; foo f1() {         foo a(5);         a.ptr[0] = 2;         return a; } int main() {         foo = f1();         cout<<a.ptr[0]<<endl;         return 0; } 

what expected output: junk value.

f1 returns by value, means copy of a made , copy shares same memory locations @ (a , it's copy) respective ptrs point at.

outside f1, a gets destroyed. it's destructor called deallocate ptr's memory. means memory location copy's ptr points @ invalid. so, expect junk value output.

the output 2.

why?

the standard never says should expect "junk value". instead, says you'll undefined behaviour. since not following rule of 3 (or five), dynamically allocated array of ints destroyed when f1 returns , object a ends pointer destroyed array. access gives undefined behaviour.

the reason you're seeing value 2 because memory location hasn't been reused since value 2 in there. however, reasoning meaningless far standard concerned.


Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -