봐 :이 경우 std :: stack :: push()와 std :: stack :: emplace() 사이에 차이점이 있습니까? 이 코드에서
struct Dummy
{
int bla;
int blabla;
char character;
Dummy (int b, int bb, char c)
: bla(b), blabla(bb), character(c)
{}
};
std::stack<Dummy> s;
Dummy dummy;
s.push(dummy); // (1)
s.emplace(dummy); // (2)
나는 (1)
과 (2)
의 차이를 볼 실패합니다. 난 당신이 추가되는 개체의 생성자에 대한 인수를 제공 할 때 emplace()
유용 알고, 예를 들면 :
s.emplace(1, 2, 'c');
하지만 난 모르는 차이가 나는 두 push()
및 emplace()
때문에 설명하는 경우에 무엇을해야 로컬 dummy
개체에 대한 참조를 가져 와서 copy ctor 또는 이와 유사한 것을 사용하여 새 개체를 만듭니다. push()
과정에서 임시 개체를 만드나요?
왜 차이가있을 필요가 있다고 생각하십니까? 일반적으로, emplace는 푸시 (push),보다 일반적이고 때로는 더 효율적입니다. – rici
둘 다 전달 된 인수의 복사본을 구성하기 때문에 차이가 없습니다.'emplace()'는 전달 인수를 완벽하게하고 싶을 때 유용합니다. – 0x499602D2
두 번째 호출 Dummy :: Dummy (const Dummy &)는 전달할 매개 변수 이후가 아니겠습니까? 나는 s.emplace()와 같이 emplace를 사용하는 것을 보았습니다. – Exceptyon