- Object 생성과 Container 추가를 한번에 수행
(기존 같이 Data 생성, 복사, 삭제 의 과정이 필요 없음)
- STL의 대부분 Container에서 지원
push_back() -> emplace_back() push_front() -> emplace_front() insert() -> emplace() |
class ITEM {
public:
ITEM(int n) { m_nNum = n; }
int m_nNum;
};
std::vector<ITEM> vItem;
vItem.push_back(ITEM(100)); // make ITEM(100) -> copy ITEM to vector -> delete ITEM
vItem.emplace_back(100); // make ITEM(100) in vector
|
smart pointer 사용시는 주의해야 한다. 특히unique_ptr 같은 경우는 반드시 아래와 같이 사용해야 한다.
vector<unique_ptr<ITEM>> v;
unique_ptr<ITEM> i1(new ITEM(1));
//v.push_back(i1); // error
v.push_back(std::move(i1)); // ok
//v.emplace_back(i1); // error
v.emplace_back(std::move(i1)); // ok
vector<auto_ptr<ITEM>> v2;
auto_ptr<ITEM> i2(new ITEM(2));
//v2.push_back(i2); // error : std::auto_ptr<> no copy constructor available
// or copy constructor is declared 'explicit'
v2.push_back(std::move(i2)); // ok
v2.emplace_back(i2); // ok
|
댓글 없음:
댓글 쓰기