336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
(예제1)
#include
using namespace std;
class Point
{
public:
int x, y;
Point(int a = 0, int b = 0) : x(a), y(b) { cout << "ctor" << endl; }
~Point() { cout << "dtor" << endl; }
};
int main()
{
Point p1(1, 2); // p1이라는 이름으로 접근이 가능
Point(1, 2); // C++ 에서는 사용자가 임시객체를 명시적으로 만들수도 있다.
// unamed object : 이름없는 객체라고도 불림
// 임시객체는 수명이 자신을 선언할때 만들어져서 문장의 끝(;) 에서 파괴됨
// 임시 객체의 파괴는 "A" print되기 전에 dtor가 print된다.
Point(1, 2), cout << "X" << endl; // 여기서 임시객체의 수명을 확실히 알수 있다.
// 임시객체는 ; 에서 파괴가 되는데 dtor가 호출되기 전에 X가 찍히는걸 확인할수 있다.
Point p2(1, 2);
p2.x = 10; // 1. OK ..p2의 메모리는 계속 존재한다.
//Point(1, 2).x = 20; // 임시객체는 =의 왼쪽에 올수 없다.
// 어차피 파괴될건데 이런 동작은 의미가 없다.
// error C2106: '=': 왼쪽 피연산자는 l-value이어야 합니다.
//___________________________________________________________________________
cout << &p1 << endl;
cout << &Point(1, 2) << endl; // error. 임식객체는 주소를 얻을수 없다. (VC에서는 컴파일이 되는데... 표준에서는 안된다고 나와 있음)
// <<프로젝트 속성 -> 언어>>
// 언어 확장 사용 안 함 : 아니오--> 사용한다.
// (의미)마이크로소프트 문법이 포함된다.
// ->예로 바꾼다. (그러면 거의 표준)
// 에러 발생됨!!
// Point* p = &Point(1, 2); //error
cout << "A" << endl;
}
(예제2)
#include
using namespace std;
class Point
{
public:
int x, y;
Point(int a = 0, int b = 0) : x(a), y(b) { cout << "ctor" << endl; }
~Point() { cout << "dtor" << endl; }
};
int main()
{
// 임시객체와 참조
//Point p1;
//Point& r1 = p1;
//Point& r2 = Point(); // error C2440: '초기화 중': 'Point'에서 'Point &'(으)로 변환할 수 없습니다.
// 임시객체는 참조를 가르킬수 없다.
const Point& r3 = Point(); // 상수 참조로는 가르킬수 있다.
// 수명연장의 수단, r3가 살아 있는 동안에는 임시객체가 살아 있을 수 있다.
// 탄생 배경은?
//r3.x = 10; // error. 임시객체의 수명은 연장되었지만 r3는 const 이다.
cout << "A" << endl;
// C++11 의 rvalue reference로 임시객체를 가르킬수 있다.
Point&& r4 = Point(); // OK...
// 앞에 상수가 없기 때문에 값을 바꿀수 있다.
r4.x = 10; // ok
// (왜 ravlue reference가 필요한가?) move 와 perfect fowarding을 배우면 알게 된다.
// 참고
// int& r5 = 10; // r5를 통해서 10을 바꿀수 없다.
// 상수는 참조할수 없다.
// const int& r6 = 10; // 10을 가르킬게 그러나 바꾸지는 않을테닌깐 허용해줘!! OK.
// r6가 10을 가르키기 위해서는 메모리 공간이 잡혀야 한다.
// 10의 수명과 r6의 메모리 수명은 같이 간다.
// 결국 이것을 임시객체에도 적용하여 상수 참조로는 가르킬수 있다.
}
(예제3)'ⓟrogramming > C++' 카테고리의 다른 글
[Thread] Handling exceptions from thread functions (0) | 2018.01.03 |
---|---|
Visual Studio 에서 Boost 사용법 (0) | 2016.07.28 |
rvalue (0) | 2016.05.11 |
static_assert (0) | 2016.05.10 |
부분전문화(partial specialization) template (0) | 2016.05.10 |