스마트 포인터에 대한 몇 가지 가이드를 읽었습니다. 그 말의 의도를 이해할 수 있다고 생각하지만, 아직 그것에 대해 신경 쓰이는 것이 있습니다.스마트 포인터 및 스택 개체
스마트 포인터는 new를 사용하여 힙에 할당 된 데이터에 대한 포인터로 작업하기위한 것이고 일단 스마트 포인터가 범위를 벗어나면 소멸자는 포인터가 가리키는 정보를 할당 해제합니다. 그러나 실수로 스택 포인터가 힙 대신 스택에 할당 된 객체를 가리킨다 고 가정합니다. 이 경우 스택 객체에서 delete를 사용하려고하므로 불쾌한 세그멘테이션 오류가 발생합니다.
문제를 설명하기 위해 여기에 두 가지 코드 스 니펫이 있습니다. 이 데모에서는 스마트 포인터에 this 구현을 사용했습니다. 첫째, 적절한 방법은 스마트 포인터를
int main(void)
{
int my_num = 17;
int *p = new int(my_num);
MyAuto_Ptr<int> p2(p);
return 0;
}
를 사용하고 여기에 버그 버전은 분할 오류가 발생합니다 스택 객체에 대한 포인터와 함께입니다.
int main(void)
{
int my_num = 17;
int *p = &my_num;
MyAuto_Ptr<int> p2(p);
return 0;
}
스마트 포인터가 스택 개체를 가리키는 경우 사용자에게 경고하는 방법이 있습니까?
가 교체되는 정의되지 않은 동작을 호출하는 "with"로 세그먼트 화 오류가 발생합니다. 'delete p'와 같습니다. – Elazar