은 다음 코드 조각을 고려하십시오왜 개체에서 이동 한 소멸자가 호출 되었습니까?
struct foo {
std::string id;
};
int main() {
std::vector<foo> v;
{
foo tmp;
v.push_back(std::move(tmp));
}
}
코드의 조각은 입증 :
클래스foo
것입니다의 기본 생성자는 객체의 구성에 대해 호출 할
tmp
.foo
클래스의 이동 생성자는v.push_back(std::move(tmp));
문에서 호출됩니다.- 소멸자
class foo
이 두 번 호출됩니다.
질문 :
- 객체에서 이동 a의 소멸자는 두 번 호출되는 이유는 무엇입니까?
- 실제로 이동되는 대상에서 무엇이 이동합니까?
이동 된 개체는 한 번만 소멸됩니다. 모든 객체는 한 번 생성되고 한 번 파괴됩니다. 두 소멸자 호출은'tmp'와 벡터의 객체를위한 것입니다. –