러슬람 ㅈㅅ
러스트 생초짜임.
Drop이나 Copy 보는데, 이것들은 직접 콜 하는게 아니고 컴파일러 단에서 자동으로 수행되는 거 같은데, 인터페이스랑은 좀 다른 느낌임.
다른 예시 보면, Impl 된 트레잇은 멤버 함수처럼 콜 가능한데 얘네는 아니지않음?
왜 트레잇으로 분류된거임?
러슬람 ㅈㅅ
러스트 생초짜임.
Drop이나 Copy 보는데, 이것들은 직접 콜 하는게 아니고 컴파일러 단에서 자동으로 수행되는 거 같은데, 인터페이스랑은 좀 다른 느낌임.
다른 예시 보면, Impl 된 트레잇은 멤버 함수처럼 콜 가능한데 얘네는 아니지않음?
왜 트레잇으로 분류된거임?
마커 트레잇이라고 걍 컴파일러 지시자 같은거 아닌가
drop은 마커 트레잇이 아니고 Copy, Send, Sync같은 애들은 마커 트레잇임. .drop() 혹은 drop(_) 으로 직접 호출도 가능함. 참고로 마커 트레잇이 있는 이유는 러스트 내부에서 본연의 속성을 부여하기 위해서 필요함
.drop()으로 직접 호출할 수 없음
[ GROK ] 러스트에서 Drop은 구조체(struct)나 열거형(enum)이 스코프를 벗어날 때 자동으로 호출되는 동작을 커스터마이징할 수 있게 해주는 도구야. 근데 이걸 왜 트레잇으로 만든 걸까? 핵심은 러스트의 설계 철학과 유연성에 있어. Drop은 사용자가 "이 타입은 정리할 때 특별한 동작을 해야 해"라고 컴파일러에게 말하는 방법이야. 트레잇은 이런 약속을 깔끔하게 표현하는 러스트의 도구야. 모든 타입에 강제로 정리 로직을 넣지 않고, 필요한 경우에만 Drop을 구현할 수 있게 해줘. 러스트는 트레잇으로 타입의 특성을 정의하는 걸 좋아해. Copy, Clone, Debug 같은 것들도 다 트레잇이잖아. Drop도 그 흐름에 맞춘 거야.
다들 답변 감사요
cpp에 cpo 비슷한 느낌이라 봐야 할려나 - dc App
자원을 해제 한다거나 종료 절차를 밟는 등의 정리 코드를 넣어야 할 때가 있음 Drop에 넣어 놓으면 실수를 크게 줄일 수 있음 변수를 통해서 객체의 접근이 불가능해진 이후의 어느 시점에 정리되니까 Drop::drop은 오류를 반환하지 않으니 신경 써야할 부분이 좀 있긴함
cpp의 소멸자랑 같다고 봤는데, Trait 들은 보통 멤버 함수처럼 호출되가지고 이런 특수한 Trait 들은 왜 Trait 으로 분류되는지 궁금했음 그런데 명시적으로 호출도 가능하다고 하네
기억이 가물한데 Drop::drop은 직접 호출이 안되고 std::mem::drop일듯?