class A
{
public:
int iValue;
A(){Print("++");}
~A(){Print("--");}
};
//......................
A m_A[2];
void OnStart()
{
A a;
m_A[0] =a;
m_A[1] = new A();
}
실행하고 생성자와 소멸자가 호출된 횟수와 시간을 확인합니다.
m_A[0]=아; 이 경우 다음과 같습니다. m_A[0].iValue=a.iValue;
이 경우 new A()는 새 객체를 생성하고 조건부로 temp라고 합시다. 그러면 다음이 발생합니다. m_A[1].iValue=temp.iValue;
그들이 평등하다는 것을
그들이 평등하다는 것을
이 과제에 대해 모두 잊어 버리십시오.
이 과제에 대해 모두 잊어 버리십시오.
따라서 잊어 버리는 것은 아니지만 컴파일러는 그런 쓰기를 허용해서는 안됩니다 .
그리고 현재 컴파일 뿐만 아니라 오류 없이 실행됩니다!
따라서 잊어 버리는 것은 아니지만 컴파일러는 그런 쓰기를 허용해서는 안됩니다 .
그리고 현재 컴파일 뿐만 아니라 오류 없이 실행됩니다!
컴파일러는 당신이하고있는 일을 이해한다면 가능하기 때문에 허용합니다.
class A { public: int iValue; A(){Print("++");} ~A(){Print("--");} }; //...................... A m_A[2]; void OnStart() { A a; m_A[0] =a; m_A[1] = new A(); }
실행하고 생성자와 소멸자가 호출된 횟수와 시간을 확인합니다.
m_A[0]=아; 이 경우 다음과 같습니다. m_A[0].iValue=a.iValue;
이 경우 new A()는 새 객체를 생성하고 조건부로 temp라고 합시다. 그러면 다음이 발생합니다. m_A[1].iValue=temp.iValue;
실행하고 생성자와 소멸자가 호출된 횟수와 시간을 확인합니다.
m_A[0]=아; 이 경우 다음과 같습니다. m_A[0].iValue=a.iValue;
이 예에서는 두 번째 줄이 올바르지 않습니다.
개체에 대한 포인터를 저장할 수 없습니다. 컴파일러는 이를 인식하지 못합니다.
이 예에서는 두 번째 줄이 올바르지 않습니다.
개체에 대한 포인터를 저장할 수 없습니다. 컴파일러는 이를 인식하지 못합니다.
실행하고 생성자와 소멸자가 호출된 횟수와 시간을 확인합니다.
m_A[0]=아; 이 경우 다음과 같습니다. m_A[0].iValue=a.iValue;
이 경우 new A()는 새 객체를 생성하고 조건부로 temp라고 합시다. 그러면 다음이 발생합니다. m_A[1].iValue=temp.iValue;
아마도 생성자 3, 소멸자 2일 것입니다. 나머지는 정확합니다.
다음이 발생합니다. m_A[1].iValue=temp.iValue;
벌써 4번째 해석입니다!
그렇다면 종료 시 삭제를 호출해야 하는 이유는 무엇입니까? 임시 개체의 경우?
벌써 4번째 해석입니다!
그렇다면 종료 시 삭제를 호출해야 하는 이유는 무엇입니까? 임시 개체의 경우?