Start New Discussion within our Software Development Community
#include<stdio.h>

class q1 {
int id;
public:

q1() { id = 1; printf("mkdef: %d\n", id); }
q1(int start) { id = start + 1; 
				printf("mknew: %d\n", id); }
~q1() { printf("rm: %d\n", id); }
int something(int n) { printf("La-de-da:%d\n", id);
return n*(id+3);}
};

void foo(void)
{
	q1 one(1);

	one.something(4);
}

int main()
{

q1 a;

printf("%d\n", a.something(3));
foo();
q1 b(6);
printf("Bye..Bye...");
return 0;
}

here is the output log:

mkdef: 1
La-de-da:1
12
mknew: 2
La-de-da:2
rm: 2
mknew: 7
Bye..Bye...rm: 7
rm: 1

Hello.,
im doing this walkthrough and i understand everything except the last part when the destructor gets called last, and rm=1., And at what point are we going out of scope? when we return 0, or with printf statement "bye bye"? when we created a new class q1 b(6), and passed 6 to the function q1(int start){id=start + 1;.....}, so isnt rm should be 7? why it 1 when i compile????? Greatly appreciated

//create object called a
mkdef: 1
La-de-da:1
12
//create object called one
mknew: 2
La-de-da:2
//destroy object called two when closing } in foo() found
rm: 2
//create object called b
mknew: 7
Bye..Bye...
//find closing } for main() so destroy objects still in scope
//object b destroyed first since it is on top of stack of object variables, or at least that's how I understand it to work
rm: 7
//then destroy object a
rm: 1

I believe going out of scope occurs with closing brace creating the scope or with completion of loop if that's the definition of the scope.

This article has been dead for over six months. Start a new discussion instead.