2011-01-04 5 views
0

여러 번 루프가 있고 새로운 개체가 루프의 시작 부분에 생성되어 컬렉션에 추가되는 상황이 있습니다. 예를 들어, 의사 코드 :레크리에이션 또는 재 초기화?

iterating over a resultset do 
    create an object 
    set instance data in object to some resultset data 
    put object in collection 
next 

대신이 접근 방법은 무엇입니까?

create an object 
iterating over a resultset do 
    set instance data in object to some resultset data 
    put object in collection 
next 

두 방법의 장단점은 무엇입니까? 어느 것이 더 빠를 수 있습니까? 둘보다 더 좋은 방법이 있습니까?

P. : 나는 어떤 태그를 넣을 지 모른다. 뭐라고 요.

답변

0

구현에 사용하는 언어에 따라 결과가 달라집니다. 일부 언어는 객체에 대한 참조를 반환합니다. 따라서 첫 번째 옵션은 새 객체가 만들어지고 자체 값을 사용하여 컬렉션에 추가되기 때문에 기대 한대로 작동합니다.

iterating over a resultset do 
    create an object 
    set instance data in object to some resultset data 
    put object in collection 
next 

그러나

언어는 단순히 객체에 대한 참조를 반환하고 시도하고 두 번째 방법을 할 경우

create an object (x) 
iterate over resultset do 
    set instance data in object (x) to resultset data (returns a reference to x with updated data) 
    put object in collection (puts a reference to x in collection) 
next 

그래서 당신은 같은에 대한 참조의 무리와 함께 종료됩니다 결과 집합을 반복 한 후 컬렉션의 개체이며 마지막 값은 무엇이든 값이됩니다.

0

귀하의 최종 의사는 더 같이해야한다 : 당신은 당신이에 대한 참조를 추가 동일한 개체를 수정 유지하기 때문에

create an object 
iterating over a resultset do 
    set instance data in object to some resultset data 
    **clone** object into collection 
next 

그렇지 않은 당신은 단순히, 최종 개체의 많은 사본을 끝낼 것입니다. 따라서 실제로 개체 공간이나 생성 시간을 절약 할 수는 없습니다. 두 번째 방법은 어떤 이유로 초기화 할 필요가있는 각 루프를 더 적은 멤버로 변경해야하는 경우와 같이 모든 루프를 다시 초기화하지 않기를 원하는 경우에 완벽하게 유효합니다. 개체의 복사 생성자가 튼튼한 지 확인하십시오.