2012-09-26 3 views
1

공유 포인터 때문에 내 프로그램이 더티 시스템 종료로 문제가 발생했습니다. 해결책을 찾았지만 확실한 답변이 없으면 확실하지 않습니다.프로그램 종료시 부스트 shared_ptr이 유효하지 않음

이것은 최소한의 예입니다 : 여기

double var; 
boost::shared_ptr<const double> ptr1 (&var); // creates an invalid pointer on program exit 
boost::shared_ptr<const double> ptr2 (new double); // works fine 

int main (int argc, char **argv) 
{ 
    return 0; 
} 

내가 varify 싶습니다 내 대답입니다 : ptr1의 경우

뾰족한-에 반대 포인터 전에 삭제됩니다, 어떤 그런 다음 잘못된 주소를 가리 킵니다. 그러나 ptr2의 경우 공유 포인터의 "현명함"이 위의 문제를 처리합니다. 맞습니까?

작은 추가 질문 : ptr1을 작동시키는 방법이 있습니까? (reset()을 시도한 적이 있습니까?) 또는 그렇게 나쁜 프로그래밍 습관입니까?

설명해 주셔서 감사합니다.

+0

, 즉이 세계의 스택 변수 스택 변수의 주소를 가지고있는 shared_ptr에 – PSIAlt

+0

@PSIAlt을 통과 할 잘못이 아니다 그것의, 그러나 점 동적으로 할당되지 않았기 때문에 shared_ptr이 기본 deleter로 소유해서는 안됩니다 –

답변

관련 문제