2012-11-13 5 views
1

todo a shared_ptr의 벡터에서 단순한 시도가 중단 되었습니까? 나는 분명히 잘못된 것을하고 있다고 의심하고 있습니까?boost :: shared_ptr에서 BOOST_FOREACH 충돌이 발생합니까?

std::vector< shared_ptr<SUBCLASS> > m_vecSections; 

shared_ptr<SUBCLASS> hoodSection; 
BOOST_FOREACH(hoodSection, m_vecSections){ 
    //do something 
} 
내가 당신의 구문이 있어야한다고 생각
void add_ref_copy() 
{ 
    atomic_increment(&use_count_); 
} 
+1

은 우리가 볼 수있는 문제를 repros 작은 테스트 케이스가 있나요 ... m_vecSections을 발표하고 충돌을 야기/컴파일? – Caribou

+0

SUBCLASS에서 3 규칙, 어쩌면? FOREACH는 복사 생성자를 호출합니다 ... – Roddy

+0

잠재적으로 충돌을 일으킬 수있는 식별 된 코드에는 아무것도 없습니다. 정말 답을 원한다면 문제를 보여주는 최소한의 코드 샘플을 게시하십시오. 복사 문제를 피하기 위해'BOOST_FOREACH (std :: shared_ptr const & hoodSection, m_vecSections) '를 사용할 수 있지만, 정확히 동일하지는 않습니다. –

답변

0

감사합니다들 당신은 그것을 찾을 수있는 기회, 이런 전화가 없었다

...

weak_ptr를 weakHood (shared_ptr의 (이));

0

에서 충돌을 얻고있다

:

BOOST_FOREACH(shared_ptr<SUBCLASS> hoodSection , m_vecSections){ 
    //do something 
} 
+0

부적절합니다. [filler] –

0

당신이 추가하거나 BOOST_FOREACH 내부 m_vecSections에서 요소를 제거하고 있습니까?

BOOST_FOREACH은 최종 반복기를 캐시하므로 (벡터가 변경되면 유효하지 않게되므로) 정의되지 않은 동작이 발생할 수 있습니다. 참조 http://www.boost.org/doc/libs/1_52_0/doc/html/foreach/pitfalls.html

+0

글쎄 메모리가 boost :: shared_ptr에 의해 수집되어 이상한 행동을하게되었습니다. – Middy

관련 문제