인스턴스에서 함수를 호출하는 다음 두 가지 방법간에 차이가 있습니까? 어떤게 더 좋아?포인터를 사용 하시겠습니까?
Motor M;
M.moveToPosition(Speed, TargetPosition);
Motor *M;
M->moveToPosition(Speed, TargetPosition);
고마워요!
인스턴스에서 함수를 호출하는 다음 두 가지 방법간에 차이가 있습니까? 어떤게 더 좋아?포인터를 사용 하시겠습니까?
Motor M;
M.moveToPosition(Speed, TargetPosition);
Motor *M;
M->moveToPosition(Speed, TargetPosition);
고마워요!
포인터가 초기화되지 않았기 때문에 두 번째 버전의 포인터는 Undefined Behavior입니다!
당신은 동적 타입 Motor
의 객체를 할당 할 수 있습니다 (즉 힙에 할당) :
Motor *M = new Motor;
M->moveToPosition(Speed, TargetPosition);
...
delete M;
Smart Pointers 당신이 피하는 데 도움이됩니다 힙에 할당 된 개체를 삭제하는 것을 기억해야합니다.
어느 쪽이 더 나은지에 관해서는, 나는 두려운 것이 문맥에 달려 있다고 생각합니다. 일반적으로 C++에서는 자동 객체 (스택에 있음)를 역동적 인 객체 (힙에 있음)보다 선호하는 경우가 있습니다.
스마트 포인터 (std :: unique_ptr)를 통해 M을 가리키는 것이 더 낫습니다. –
@MarcinHoppe : 당신이 코멘트하는 동안 그 조각 (그리고 그 이상)을 추가하는 중이었습니다 :) –
첫 번째 방법은 Motor
생성자를 호출합니다. 두 번째 방법은하지 않으며 포인터는 초기화되지 않습니다.
C++에서는 가능하면 포인터를 사용하지 마십시오. 여기에서 첫 번째 방법을 사용하십시오. 동적으로 모터를 할당 할 경우
, 이것을 사용 :
std::unique_ptr<Motor> M(new Motor);
M->moveToPosition(...);
두 번째 해 보셨습니까?! 초기화되지 않은 포인터를 참조 해제하는 것은 UB이고 이것이 문제없이 실행되면 놀랄 것입니다. –
어떻게 든 컴파일됩니다 –
@ Maran Dessouki 실제로 컴파일되지만 예상대로 실행되지 않습니다. –