2017-11-17 1 views
1

이전에 소프트웨어 엔지니어링 스택 교환에 관한 질문과 대답을 보았습니다. 질문은 "Why are pointers not recommended when coding with c++?"입니다. 최상위 정답은 2 점, 두 번째 점은 관심 대상입니다. 상태 :다형성과 STL 컨테이너 ... 포인터가 필요하지 않습니까?

C++에서 포인터의 대부분은 불필요합니다.

그의 스펙은 다소 긴하지만, 거기에 저자 상태 "... 현대 C++ 관용구는 종종 모든 포인터가 필요하지 않습니다.".

이것이 가장 먼저 떠오르는 것은 STL 컨테이너의 다형성입니다. 포인터를 사용하지 않고도 C++의 다른 많은 것들 중에서 이것이 가능한 이유는 무엇입니까? 몇 가지 조사 후


, this 내가 발견 할 수 있었다 전부입니다 (스포일러 : 그것은 도움이되지 않았습니다).

+3

"모든 용도"가 아니라 "대부분의 용도"라고 말합니다. –

+1

'std :: vector >'... –

+0

@KerrekSB 이것은 변장의 포인터 일뿐입니다. 포인터가 아직 사용 중입니다. – AldenB

답변

0

그것은 적어도 C++ 11에서는 가능하지만, IMO, 나쁜 생각 : 나는 위의 의견에 동의

#include <vector> 
#include <iostream> 
#include <functional> 

namespace 
{ 
struct A 
{ 
    virtual void operator()(void) { std::cout << "in A" << std::endl; } 
}; 

struct B : public A 
{ 
    virtual void operator()(void) { std::cout << "in B" << std::endl; } 
}; 
} 

int main(void) 
{ 
    A a; 
    B b; 
    std::vector<std::reference_wrapper<A>> v; 
    v.push_back(a); 
    v.push_back(b); 
    v[0](); 
    v[1](); 
    return 0; 
} 

. 컨테이너에서 동적 다형성을 수행해야하는 경우 스마트 포인터를 사용하십시오. 그들은 잘 작동합니다. 포인터가 스마트 포인터로 래핑 될 때 포인터는 나쁘지 않습니다. 경고 : 위의 경우 a와 b가 적어도 벡터와 동일한 지 확인해야합니다. 그렇지 않으면 참조가 정의되지 않습니다 (위의 코드는 좋지 않음).