페이지

2014년 12월 22일 월요일

emplacement

Emplacement (Visual Studio 2010부터 지원)

- 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



댓글 없음:

댓글 쓰기