다음은 나를 혼란하게하는 코드가있다 :벡터에서 지우기 중에 클래스의 멤버는 어떻게됩니까?
class Simple{
private:
int m_nID;
public:
Simple(int nID) {
m_nID = nID;
}
~Simple() {
std::cout << "Destructing Simple " << m_nID << std::endl;
}
Simple(const Simple& other) {
m_nID = other.m_nID;
};
};
int main(){
Simple Simple1(1); // allocating on stack
Simple Simple2(2); //
Simple Simple3(3); //
std::vector<Simple> m;
m.push_back(Simple1); //
m.push_back(Simple2); // copy constructor called
m.push_back(Simple3); //
std::cout << "\n------ ERASING ELEMENTs FROM VECTOR-------" << std::endl;
m.erase(m.begin()); //
m.erase(m.begin()); // destructor called
m.erase(m.begin()); //
std::cout << "\n------ After ERASING ELEMENT FROM VECTOR-------" << std::endl;
return 0;
}
왜이 세 가지 라인 :
m.erase(m.begin());
m.erase(m.begin());
m.erase(m.begin());
원인이 출력 :
Destructing Simple 3
Destructing Simple 3
Destructing Simple 3
m_nID 항상 3 왜? 각 push_back 복사 생성자에 대해 1,2,3을 m_nID에 복사하므로 다음과 같아야합니다.
Destructing Simple 1 // or 3
Destructing Simple 2 // or 2
Destructing Simple 3 // or 1
? 내가 그것을 실행하면
'm.mVector' :
마찬가지로, 또한 assignemnt 연산자를 정의? –
생성자를 장황하게 만들 수도 있습니다. 벡터로 푸시 할 때 재사용 (복사 및 삭제)이 발생할 수 있지만 여기에는 삭제 만 표시됩니다. –
@JosephMansfield, 내 게시물을 수정했습니다. – maciekm