2017-12-31 59 views
0

코딩 문제를 해결하기 위해 스택의 벡터로 멤버 인 "SetOfStacks"라는 자체 데이터 구조 (클래스)를 만들고 있습니다. . SetOfStacks의 멤버 함수 중 하나에서 push_back() 함수를 사용하여 벡터를 확장해야합니다. 이를 위해 멤버 함수에 스택 변수 (비 동적)를 선언 한 다음 해당 변수를 push_back()에 전달합니다.
코드가 제대로 작동하지만 이유를 알 수 없습니다. 멤버 함수가 실행을 마친 후에는 스택 변수가 범위를 벗어날 것입니다 (동적으로 할당되지 않았으므로). 따라서 벡터에 가비지가 포함될 것입니다. 나는 해결책이 동적으로 할당 된 메모리를 사용하는 것이라고 생각한다. 왜이게 효과가 있니? 가장 좋은 가설은 push_back()이 새로운 스택을 값으로 간주하고 참조하지 않고 효율적으로 새 복사본을 만드는 것입니다. 어떤 도움을 주셔서 감사합니다!동적으로 할당되지 않은 스택을 사용하여 벡터에 추가하기

+1

'push_back()'이 사본을 만듭니다. – Galik

답변

1

스택 요소를 벡터에 대입하면 요소는 값이 아닌 참조로 전달되므로 함수 정의 후에 스택 요소가 파괴 되더라도 벡터는 이미 값을가집니다. .

이 값은 함수에서 호출자로의 반환 값과 관련 될 수 있습니다. 반환 값이 함수 스택에 대해 로컬 일지라도 (즉, 함수가 실행 된 후에 파손될 예정 임) 반환 값은 호출자가 손상되기 전에 호출자 함수에 복사됩니다.