2017-10-27 2 views
2
당신이 나에게 팁을 줄 수

가능하게하는 방법이를 설계하기 :벡터가 존재하지 않는 개체를

간단히를 : 나는 (객체에 대한 포인터) 개체의 목록과 함께 포장 할 것인지, 객체 A를 가지고 A 형이 처리해야하는 B 형. 문제는 B 개체 중 일부는 삭제 될 수 있으며 A는 알 수 없다는 것입니다. 예외로 처리 할 수 ​​있다는 것을 알고 있지만 차라리 피하기를 원합니다.

전체 문제 : 나는 C++ SFML 프로젝트를 작성 중이므로 sf::RenderWindowsf::Drawable * 벡터의 포인터로 감싸고, 그 윈도우는 그려야한다. 그리고 문제는 같습니다. sf::Drawable 개체 중 일부가 이미 삭제되었을 수 있지만 sf::RenderWindow이 개체를 사용하려고합니다.

랩핑 아이디어를 취소 할 수 있지만 좋은 디자인 솔루션이 있다면 좋을 것입니다.

+4

'std :: weak_ptr'의 경우가 아닙니까? – user0042

+1

"개체 목록으로 둘러보기"란 무엇을 의미합니까? 이 문맥에서 "포장"이란 무엇을 의미합니까? – Galik

+0

@ user0042'std :: weak_ptr'은 아주 느릴 것입니다. – Galik

답변

2

당신이 삭제 된 경우 따라 if() 문에 true 또는 false를 반환 이는 std::unique_ptr를 사용하는 라이브 개체에 대한지도, 만 사용 가치를 만들거나 아닙니다 :

// use a std::unique_ptr that will record if its target has been deleted 
std::vector<std::unique_ptr<sf::Drawable>> drawables; 

// deleting an element 

for(auto& drawable: drawables) 
{ 
    if(needs_to_be_deleted(drawable.get())) 
     drawable.reset(); // deletes object 
} 

// process elements 

for(auto& drawable: drawables) 
{ 
    if(drawable) // returns false if element is deleted 
    { 
     // pass by reference or pointer (using get()) 
     do_something_with_drawable(drawable.get()); 
    } 
} 
0

메모리를 다시 사용할 필요가 없습니다. 메모리를 다시 사용할 필요가 없습니다. 메모리를 다시 사용할 필요가 없습니다. 이지도에 여전히있는 경우

관련 문제