shared_ptr 의경우
배열객체 이용시에 삭제자를 명시해줘야함
그런데 왜 unique_ptr에서는
배열객체 이용시에 삭제자를 생략해도 되는것인지???
------------------------------------------------
unique_ptr의 경우 삭제자 지정시
템플릿 인자에 형을 선언해야함
ex) unique_ptr<POINT, decltype(&Deleter)> p_point(new POINT, Deleter);
shared_ptr의 경우는 삭제자 지정시
템플릿인자에 형을 선언하지 않음.
ex) shared_ptr<POINT> p_point(new POINT, default_delete<POINT>());
어째서 이런차이가 생기는것인지??
삭제자란 말은 누구한테 들으신거죠?
최흥배님 책에 그렇게./...
삭제자라고는나오지만 소멸자라고 이해하고있음
shared_ptr이랑 unique_ptr의 deleter를 말하는 듯 한데, unique_ptr은 unique_ptr<T[]>로 특수화가 되어 있어서 (
http://en.cppreference.com/w/cpp/memory/unique_ptr)
자동으로 해주는데 shared_ptr은 배열에 대한 특수화가 없어
이유가있음?
unique_ptr은 특수화가되있고 shared_ptr은안되있는 이유.
둘의 차이가 소멸자에관해서 저기 두개가 다른데 배열객체 이용시에 명시하느냐 안하느냐 / 소멸자 직접 지정시에 템플릿인자에 형을 선언하느냐 아니면 뒤에다가 쓰느냐
unique_ptr은 템플릿 인자에 Deleter type을 받지만 shared_ptr은 deleter를 type erasure를 이용해서 받기 때문에 이건 아마도 unique_ptr은 소유자가 하나고, 굳이 deleter를 type erasure를 사용할 필요가 없기 때문이 아닌가 싶다. type erasure는 동적 메모리 할당을 동반하니까 퍼포먼스에도 영향을 미칠테고
퍄~고수
하지만먼소린지모름^_^
찾아보니까 대충 같은 이유인듯??
http://stackoverflow.com/questions/6829576/why-does-unique-ptr-have-the-deleter-as-a-type-parameter-while-shared-ptr-doesn
호옹 그렇군요