C++

2016-12-17 1 views
1

그래서 스마트 포인터가 원시 포인터를 포장 클래스하지만 아무것도 스마트 포인터는 개체 만은 전통적인 원시 포인터를 사용하는 어떤 이유가 정확한 있다면C++

을 삭제 호출하는 소멸자를 포함? 스마트 포인터를 사용하는 것이 더 편리할까요?

+2

글쎄, 때로는 범위를 벗어날 때'delete'를 호출하지 않는 변수가 필요합니다. –

+2

글쎄, 분명히 스마트 포인터를 구현하기 위해 원시 포인터를 사용해야합니다. –

답변

1

스마트 포인터에는 일정한 오버 헤드가 있습니다. 스마트 포인터가 제공하는 기능 (RAII를 통한 자동 메모리 관리)이 필요하지 않은 경우 원시 포인터를 사용합니다. 원시 포인터 자체가 반드시 나쁜 것은 아니라는 것을 기억하십시오. 원시 포인터는 자원을 소유하고 있습니다. 소유권을 명시하려면 delete -ion이 필요합니다. 우리는 그것을 원하지 않는다.

+1

@Downvoter 의견을받을 수있는 이유는 무엇입니까? –

+1

std :: unique_ptr은 특별히 제로 오버 헤드가되도록 설계되었습니다. 그 속성을 가진 유일한 스마트 포인터입니다. 하지만 스마트 포인터 오버 헤드는 스마트 포인터 동작을 위해 직접 작성해야하는 것입니다. – rubenvb

+1

@rubenvb 그러나 기본 'unique_ptr'을 초기화하면 기본값보다 단순한 포인터가 초기화됩니다. – juanchopanza

2

스마트 포인터는 리소스 관리의 한 형태입니다. 더 적절한 다른 것들이 있습니다. 예를 들어, 객체의 메모리 전용 그래프 (즉, 어떤 객체도 비 메모리 리소스를 가지지 않습니다.)를 할당하여 경기장에 할당하면 더 효율적입니다. 오버 헤드가 훨씬 적습니다. 특히 객체가 반드시 캐시에서 뜨거울 필요가없는 경우에는 릴리즈하는 것이 훨씬 빠릅니다. 아레나에서 유지 관리되는 객체 그래프는 원시 포인터를 사용하여 연결됩니다.

스마트 포인터는 리소스 관리를위한 여러 도구 중 하나입니다. 그들은 다른 도구를 모르는 사람들이 과도하게 사용하는 경향이 있습니다. 물론, 그것은 일반적인 패턴입니다. 오직 네가 망치를 휘두르는 사람은 손톱처럼 보입니다!