2016-10-02 3 views
1

전달할 객체에 일부 값을 복사하는 기능이 있습니다.배열의 공유 ptr에서 공유 ptr 액세스

그래서,이

void functionReturnObjects(int* ptr); 

같은 뭔가 내가 위의 10에서 개별 공유 PTR을하려면 지금이

std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>()); 
functionReturnObjects(sp.get()); => so this will copy int objects to sp. 

같은 기능 이상 호출하고 별도의 복사본을 만들고 싶을 것이다 또는 다른 공유 된 ptr과 공유하려고합니다.

그래서

std::shared_ptr<int> newCopy = sp[1] ==> This is not working I am just showing what I want. 

같은 기본적으로 나는 (10)가 새로운 메모리를 할당하지 않고 새로운 개인 공유 PTR 포인터를 공유에서 소유권을 이전하고자합니다.

질문이 명확하지 않은 경우 알려주십시오.

+1

경우 "개인"응시 다음 당신은 다른 sared 포인터 소유권을 공유하지 않습니다 포인터 다른 포인터를 공유하지 않기 위해 다른 것을 할당해야합니다. – Galik

+1

아니요, "자습서"를 읽지 마십시오. 적절한 책을 사세요. –

답변

3

사용 std::shared_ptr's aliasing constructor (과부하 # 8) :

template< class Y > 
shared_ptr(const shared_ptr<Y>& r, element_type *ptr); 
std::shared_ptr<int> newCopy(sp, sp.get() + 1); 

new int[10]로 만든 전체 배열의 newCopysp주 소유권을하지만, newCopy.get()는 두 번째 요소를 가리 킵니다 상기 배열의 배열. 당신이 더 읽기 찾는 일 경우 C++ (17)이에서

대신 다음과 같이 할 수 있습니다

std::shared_ptr newCopy(sp, &sp[1]);