2016-10-02 10 views
1

У меня есть функция, которая копирует какое-то значение в объекты, которые я передам.Доступ к общему ptr из общего ptr массива

Так, что-то вроде этого

void functionReturnObjects(int* 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 от выше 10 и хочу сделать отдельную копию или хотите поделиться им с каким-либо другим общим 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); 

Это сделает newCopy и sp доли собственности на весь массив, созданный с new int[10], но newCopy.get() будет указывать на второй элемент указанного массива.

В C++ 17 это может вместо того, чтобы выглядеть следующим образом, если вам посчастливилось найти его более читабельным:

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

 Смежные вопросы

  • Нет связанных вопросов^_^