공유 포인터 때문에 내 프로그램이 더티 시스템 종료로 문제가 발생했습니다. 해결책을 찾았지만 확실한 답변이 없으면 확실하지 않습니다.프로그램 종료시 부스트 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()
을 시도한 적이 있습니까?) 또는 그렇게 나쁜 프로그래밍 습관입니까?
설명해 주셔서 감사합니다.
, 즉이 세계의 스택 변수 스택 변수의 주소를 가지고있는 shared_ptr에 – PSIAlt
@PSIAlt을 통과 할 잘못이 아니다 그것의, 그러나 점 동적으로 할당되지 않았기 때문에 shared_ptr이 기본 deleter로 소유해서는 안됩니다 –