2014-10-24 2 views
1

내가 인수로 std::vector<char>를 받아 인수로 std::shared_ptr<char> 소요 다른 함수 bar를 호출하는 기능 foo 있습니다.소유권 이전 :: shared_ptr의

void foo(std::vector<char> arg) 
{ 
    bar(?) // what do i pass to bar here? 
} 

void bar(std::shared_ptr<char> arg) 
{ 
    // do something asynchronously 
} 

어떻게 벡터의 기본 배열의 소유권을 shared_ptr로 이전합니까?

벡터 크기가 커서 (4MB) 벡터에서 다른 문자 배열로 복사하는 것을 피하고 싶습니다.

+1

'std :: shared_ptr '는 단일 문자에 대한 포인터입니다. 'char' 배열을 소유 할 수 없습니다. – japreiss

+4

@japreiss : 사실'std :: shared_ptr '의 Deleter가 유형이 지워졌기 때문에 가능합니다. 이 함수가'std :: shared_ptr (new char [65535], std :: default_delete ());'처럼 생성되면, 그것은 완벽하게 유효합니다. 그러나 OP가 실제로 이것을하는 것은 의심 스럽습니다. –

+0

@japreiss 요점 : 포인터가 (스마트 또는 그렇지 않은)'char'에있는 이유는 무엇입니까? –

답변

5

수 없습니다. 벡터의 소유권을 다른 벡터로 이동하는 것과 별개로 풀 수있는 방법은 없습니다.

barstd::vector<char>으로 수정하면 벡터를 복사하지 않고 이동하여 소유권을 이전 할 수 있습니다.