- 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 
 | 
댓글 없음:
댓글 쓰기