unique_ptr
의 일치하는 벡터가 두 개 있습니다. 나는 두 개의 구조체를 포함하는 하나의 벡터를 만들어 통일하기로 결정했다. 구조체는 다른 아이템도 포함 할 것이고 결국은이 리팩터링을 포함 할 것이다.unique_ptr을 포함하는 구조체 항목을 stl 컨테이너에 추가
이 벡터에 새 항목을 추가하는 가장 좋은 방법은 무엇입니까?
내 현재 코드는 unique_ptr
문제를 일으키는 물론
std::vector<DestinationObjects> destinations;
for (unsigned short &id: ids) {
DestinationObjects d;
d.transmitter = unique_ptr<Transmitter> (new Transmitter(id));
d.controller = unique_ptr<Controller> (new Controller(id));
destinations.push_back(d);
}
이 복사 d
입니다. 이것을 고치는 가장 좋은 방법은 무엇입니까? 나는 확실하지 않다 일부는 내가 상상할 수
옵션은 작동합니다
- 그냥
shared_ptr
로 전환합니다. (간단한 찾기 - 바꾸기가 가능하지만 경찰관처럼 느껴짐). - unique_ptr을 이동하는 구조체의 이동 생성자를 작성하십시오. (구조체를 확장 할 때 유지 관리해야 할 또 다른 문제는 잘못 될 수 있습니다.)
- unique_ptr에 대해 null 포인터가있는 빈 struct 인스턴스를 푸시하고 벡터에서 한 번 편집합니다. (Fiddly 문법.이 또한 작동할지 모르겠습니다.)
다른 아이디어는 무엇입니까? 아니면 내가 왜 나열된 것들 중 하나를 선호해야합니까?
'unique_ptr'과 관련하여 어떤 문제가 발생한다고 생각하십니까? – Oswald
암시 적 이동 생성자는 어떤 이유로 든 자신의 복사본 생성자를 작성하여 죽이지 않는 한 괜찮습니다. 왜냐하면'vector'는 객체를 재할 당할 때 객체를 움직일 필요가 있기 때문에 타입은 움직일 수 있어야합니다. –
그냥 ... 옮기시겠습니까? 또는 상사와 emplace_back과 같은 생성자를 얻으십시오. –