C++에서 C#으로 넘어올 때 주의할 점
C++만 쓰다가 가끔 C#을 다뤄야 할 때가 있는데, 이럴 때마다 “왜 안 되지?” 싶어서 시간을 낭비하는 경우가 종종 생긴다.
public void CheckAllServers( List<ServerStatus>& list )
{
for ( auto serverStatus : list )
serverStatus.status = CheckSocket( serverStatus.ip, serverStatus.port );
}
C++였다면 이렇게 사용하면 될 기능을..
public void CheckAllServers( ref List<ServerStatus> list )
{
for ( int i = 0; i < list.Count; ++i )
{
ServerStatus serverStatus = list[ i ];
serverStatus.status = CheckSocket( serverStatus.ip, serverStatus.port );
list[ i ] = serverStatus;
}
}
이렇게 사용해야한다.
ref로 받은 리스트의 원소는 다시 ref로 접근할 수 없기 때문에, 새로운 객체를 복사하고 수정한 뒤 다시 대입하는 번거로운 과정이 필요하다.
C#이 여러 면에서 C++보다 개선된 언어라고 하지만, 이런 부분에서는 오히려 C++의 참조 기반 접근 방식이 더 직관적이다.
댓글 남기기