이것은 매우 기본적인 질문이지만 여기에서 무슨 일이 일어나고 있는지 논리적으로 생각할 수는 없습니다. 코드 조각을 고려어떤 C++ 벡터 push_back이 루프 내에서 생성 된 객체에 대해 호출됩니까?
class Board{
private:
vector< vector<Cell> > allCells;
int bheight;
int bwidth;
public:
Board(int width = 10, int height = 10){
bheight = height; bwidth = width;
allCells.resize(width);
#loop for creating cell objects
for(int i = 0; i < width; i++){
allCells[i].reserve(height);
for(int j = 0; j < height; j++){
Cell aCell(i,j,0); #an object created inside a loop
allCells[i].push_back(aCell); #push it into a vector
}
}
}
이 코드는 allCells
여전히 적절한 정보를 저장 (벡터) 벡터에서, 모든 개체를 생성자를 종료 한 후 즉 잘 작동합니다. 내 질문은 이것이 어떻게 달성 된 것인가? 임시 aCell
객체가 좌변 객체이기 때문에
void push_back (const value_type& val);
void push_back (value_type&& val);
그것은 두 번째 변형을 호출 할 수 없습니다 : 정의에 의하면, vector.push_back는 두 가지 변종이있다. 첫 번째 변형을 호출하면 임시 개체 aCell
이 루프를 종료 할 때 삭제됩니다.
이것에 대한 설명은 감사하겠습니다.
편집 : 오류로 인해 고정 된 코드는 샘 Varshavchik 지적하고 첫 번째 변형을 호출하는 경우 다음 루프가 종료 될 때 파괴 임시 객체 aCell
를, 밀어,
[새 요소는 'value'의 복사본으로 초기화됩니다.] (http://en.cppreference.com/w/cpp/container/vector/push_back). – user657267
아, 첫 번째 변형에서 push_back 객체가 생성 된 객체가 아니라 오히려 인수의 복사 생성자에 의해 생성 된 객체입니까? – TuanDT
죄송합니다. 죄송합니다. –