저는 현재 C++ 11 기능에 익숙해 지려고합니다. 내가 자발적으로 좋아하는 한 가지는 스마트 포인터, 특히 shared_ptr
입니다. 그러나 일반적인 포인터를 shared_ptr에 할당하는 것을 허용하지 않는 것처럼 보입니다. 예를 들어make_shared를 사용하는 더 짧은 방법은 무엇입니까?
typedef shared_ptr<string> StringPtr
...
StringPtr x;
...
x = new string("bla");
적어도 VC2010에 실패하고 템플릿 인수 유형의 일반 포인터 과부하가 누락 shared_ptr::operator=
에서의 인터페이스를 볼 때 나는 물론이를 이해할 수있다. 지금은 그냥 명시 적으로 shared_ptr
생성자를 사용하여 일반 포인터에서 shared_ptr
를 만들 수 있습니다 즉
x = StringPtr(new string("bla"));
하지만 내 의견이 중복 및 직관적이다
. 스마트 포인터에 일반 포인터를 할당 할 때 프로그래밍 의도를 가능한 많이 표현했다고 생각합니다. 구문을 추가하면 명확성이 크게 떨어지지 않고 가독성이 떨어집니다. 물론 스마트 포인터에 이미 "소유 된"일반 포인터를 할당하지 않는 것은 나에게 달린 것이지만 ...가독성을 복원하는 동안 나는 make_shared<>
을 우연히 만났습니다. 하지만 다시 라인
x = make_shared<string>("bla");
훨씬 더 읽기 쉽고 컴팩트 위의 스마트 포인터의 명시 적 구조 이상입니다. 물론 성능이 약간 더 좋을 수는 있지만 그게 내가하는 것만은 아닙니다. 그래서 내 의도는 인스턴스화하고 shared_ptr에 대해했던 것처럼 make_shared 함수 템플릿의 별명을 지정하는 것이 었습니다. 그러나 분명히
typedef make_shared<string> NewString
는 전혀 유효하지 않습니다. 그래서 제 질문은 : 어떻게 가까운 글을 쓸 수 있습니까?
x = NewString("bla");
?
제 생각에'std :: make_shared <...> (...)'은 읽을 수있을뿐만 아니라 여러분이하는 일을 명시 적으로 알려줍니다. –
"전문화"에 귀하의 상황에 해당하지 않는 C++의 특정 정의가 있으므로 혼동을 피하기 위해 질문의 제목을 편집했습니다. –
@ Joachim Pileborg : 기본적으로 당신 말이 맞습니다. 그것은 맛의 문제입니다. 하지만 밑줄이 싫어서 템플릿 괄호가 마음에 들지 않습니다 (물론 템플릿을 좋아합니다!). 나는 40 개의 괄호와 20 개의 템플릿 괄호를 가진이 intellisense 라인이 내 underperforming 브레인들에게 말하려고하는 것이 무엇인지 알아 내려고 노력할 때마다 나의 싫어함에서 강화된다. – oliver