스택 개체의 황금률 규칙에 따르면 스택 개체는 함수의 범위를 벗어나면 즉시 삭제됩니다.왜 스택 객체를 반환합니까?
이Vec3d Vec3d::operator+(Vec3d const& vec) const{
return Vec3d((x + vec.getX()), (y + vec.getY()), (z + vec.getZ()));
}
호출에 생성됩니다 개체가 스택에 실제로 반환됩니다, 그리고 연산자를 invoced 기능에 사용할 수있다 : 하지만 사실은 코드에서이 작품처럼. 그래서 실제로 Vec3d를 사용하려고 시도 할 때 예외가 발생합니다. 오버로드 된 연산자의 메서드 범위를 벗어나기 때문입니다. 왜 작동합니까? 그것은 일종의 인라인 코드입니다. 할당은 itseld 함수 대신에 컴파일러에 의해 함수 호출로 이동됩니다. 또는 스택 개체가 함수 호출 대신 새로운 스택 개체로 다소 복사 된 복사본 생성자 일 ...
저는 C++을 처음 접했고 C++의 메커니즘이 실제로 작동하는지 이해하려고합니다. 당신은 자바와 함께 시작했을 때,하지만 좀 혼란 : D 사전
C++에는 값 의미가 있습니다. – chris
왜 잘못된 개체 액세스가 "예외를 throw"할 것을 제안하는지 확신 할 수 없습니다. 어디서 들었습니까? –
Oh sry, 내 잘못은 모든 것이 예외를 throw하는 Java에 익숙하다고 들었습니다. D – Matze