push에서 왜 소멸자가 작동되죠?

nk1222의 이미지

class Status {

public:

Status() {

std::cout << "Status::" << __FUNCTION__ << __LINE__ << std::endl;

}

~Status() {

std::cout << "Status::" << __FUNCTION__ << __LINE__ << std::endl;

}

Status(int status, std::string _token): status(status), token(_token) {

std::cout << "Status:: Status(int, std::string)" << __LINE__ << std::endl;

}

int status = 10;

std::string token = "";

};
int main(int argc, char* argv[])

{
queue mStatusQueue;
mStatusQueue.push(Status(0, "token")); //생성과 소멸 동시에 일어남 왜???
mStatusQueue.pop();
return 0;

}

push를 하게되면 status(0,"token")이 mStatusQueue에 들어가게 되는거 아닌가요?
status(0,"token")<-여기에서 인자있는 생성자가 만들어지면서 생성자 1번
pop()에서 queue안에 있는 데이터를 삭제시키니깐 소멸자 1번

이론상은 이렇게 이해하고있는데 혹시 왜 그런지 설명해 주실 수있나요?

yhsuk의 이미지

push의 파라미터로 쓰인 임시 Status 객체로 인한 것이겠지요.

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"