2010-12-07 3 views
2

할당 된 shared_ptr 변수를 반환하는 함수를 만들어야합니다. 이게 올바른 방법일까요?함수에 shared_ptr을 할당하십시오.

typedef boost::shared_ptr<std::vector<char> > sharePtr; 

void createPtr(sharePtr &p) 
{ 
    p = sharePtr(new std::vector<char>); 
} 

void test() 
{ 
    sharePtr p; 
    createPtr(p); 
} 

답변

4

네, 맞습니다. 하지만 글을 쓰지 않는 이유는 무엇입니까?

sharedPtr createPtr() 
{ 
    return sharePtr(new std::vector<char>); 
} 

void test() 
{ 
    sharePtr p = createPtr(); 
} 

? 이것은 당신의 버전보다 더 빠를 수 있고, 이동 의미를 지원하는 컴파일러로 더 빨라질 수 있습니다.

은 또한 대신 직접 newmake_shared를 사용하는 것이 좋습니다 :

sharedPtr createPtr() 
{ 
    return make_shared<std::vector<char>>(); 
} 

는 참조 카운터에 대한 메모리 할당을 피할 수 있기 때문이다.

+1

'make_shared'에 대한 권장 사항은 객체가 크고 ('vector'가 아닌 경우) 약한 포인터를 사용하고 있다면 (이 코드는 그렇지 않습니다),'make_shared'는 저장하는 시간/메모리에 비해 가치있는 것보다 많은 메모리를 낭비합니다. , 나는 그것을 언급 할 것이라는 점을 생각한. –

+0

@ 스티브 : 동의. counter-counter-recommendation :'make_shared'는 예외 안전합니다.이 코드에서는 문제가되지 않습니다. BTW, 일반적인 구현은 개체가 큰지 확인하고 두 경우 할당합니까? – ybungalobill

+0

@ybungalobill : 잘 모르겠지만, 대부분의 shared_ptr로 제어되는 객체는 결코 약하게 참조되지 않기 때문에 make_shared가 그렇게하는 것이 현명하지 않을 수 있습니다. –

관련 문제