2016년 3월 2일 수요일

[C++] 함수내 지역 변수 활용

#include <iostream>
class Test
{
 public:
 int* point();
};

int main()
{
int* p;
Test* t= new Test();
p=t->point();
std::cout<<*p;
}


int* Test::point()
{
 int a;
 int* b;
 a=2;
 b=&a;
 return b;
}
간단한 클래스를 만들고 그안에 함수내에 선언한변수에 값을 대입하고 그 값의 포인터값을 리턴하는 함수를 생성하였다.
지역변수는 함수소멸과 동시에 스택에서 사라진다고 들었다.
그럼 함수내에서 생성한 변수의 값을 함수 외부에서 참조를 해보면 어떨까해서 작성해보았다.
성공이었다.

간단히 팁을 적어보자 point()도 함수고 main()도 함수이다 point()는 메인보다 늦게 생성되어 소멸하여 빨리소멸되지만 그외에 함수라는 점은 다를바없다.
1.point()에서 main내 선언한 변수를 call by value, call by reference의 두가지 방법으로 받는다.
2.이를반대로 생각해보자 main()내에서도 point()에서 생성한 변수를 call by value, call by reference의 두가지 방법으로 받을 수 있다.
이러한 개념은 함수내에서 생성된 지역변수일지라도 외부에서 값을 참조할 수 있다는 것이다.
바로 똑같은 개념으로 call by reference를 사용하면 된다.

위 코드 실행하면, 2 값이 찍힌다... 
Test 객체를 delete로 소멸하고, 찍으면 쓰레기 값이 찍힌다.
객체 소멸 되기 전까지 스택에 쌓여 있는 듯...?? 




댓글 없음:

댓글 쓰기

[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자.

인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해집니다. 인라인 함수의 아이디어는  함수 호출문을 그 함수의 본문으로 바꿔치기하자는 것  남발했다가는 코드의 크기가 커질 게 뻔하다. 인라인 함수로 부풀려진 ...