개체를 가리키는 고유 포인터 집합이 있습니다. 때로는 이러한 객체에 대한 원시 포인터 중 일부를 표시하여 코드의 다른 부분이 객체로 처리 할 수 있도록합니다. 이 코드는 포인터가 특정 고유 포인터 세트에 의해 유지되는 오브젝트를 가리키는 지 여부를 모르기 때문에 포인터가 가리키는 오브젝트가 고유 포인터 세트에 있는지 여부를 점검해야합니다. 간단한 코드에서고유 포인터 집합 검색
:
int* x = new int(42);
std::set<std::unique_ptr<int>> numbers;
numbers.insert(std::unique_ptr<int>(x));
numbers.find(x) // does not compile
코드가 컴파일되지 않는 이유를 이해하지만, 내가 STL과 요소를 검색 할 수있는 방법을 생각할 수 없다. 내 요구 사항을 충족시키는 것이 있습니까? 아니면 수동으로 세트의 모든 요소를 반복해야합니까? std::find_if(numbers.begin(), numbers.end(), [&](std::unique_ptr<int>& p) { return p.get() == x;});
'std :: map>'... –
'numbers.find (std :: unique_ptr (x))'는 어떨까요? 나는'set >'을 고집하고 싶다면, 임시'unique_ptr' 객체를 만드는 것이 유일한 선택이라고 생각합니다. –
@ PhilippMatthiasSchäfer : 그것은'unique_ptr'에 의해 이미 소유 된 객체에 대해 unique_ptr을 생성 할 것입니다. 따라서 이중 삭제로 이어지는 나쁜 것입니다. 그리고 만약 그것이'unique_ptr'에 의해 소유되어 있지 않다면, 지금은 그렇습니다. 그래서 여러분이'release'하지 않으면 깨질 수 있습니다. –