Когда я хочу построить объект внутри вектора, я могу написать следующий код:
class NonTrivialType {
NonTrivialType() = default;
NonTrivialType(InitParam param){/* implementation */};
};
// array with 100 default-constructed objects in it
std::vector<NonTrivialType> data(100);
int main(){
// prepare some init parameters
InitParam param{/* some data */};
// construct an object at 50th position
data.emplace(data.begin()+49, param);
}
Что отлично работает, но, кажется, генерирует больше кода, чем если бы я использовал вместо этого новое место размещения, например:
int main(){
// prepare some init parameters
InitParam param{/* some data */};
// construct an object at 50th position
new (&data[49]) NonTrivialType{param};
}
Мой вопрос: зачем мне использовать emplace
вместо размещения new
?