2017-09-27 31 views
10

ı bir diziye bir shared_ptr var diyelim referans sayısını artıran yeni bir shared_ptr döndürün, ancak orijinal dizinin bir ofsetine işaret edin; Bir arayan dizi bazı ofset kullanırken dizi sırasını önlemek istiyorum. sp.get() + offset'u iade edersem, bu olabilir mi? Ve bir shared_ptr'u sp.get() + offset'u içerecek şekilde başlatmanın da mantıklı olmadığını düşünüyorum.Bir dizinin ofset bir bir Shared_ptr Atama

C++ için yeni, bu yüzden doğru bir şekilde yaklaştığımdan emin değilim.

+2

Ham dizinin yerine 'std :: array' kullanılmasını öneririm. Bu 'std :: make_shared' kullanıp özel silme işleminden kaçınmanıza izin verir: 'auto p = std :: make_shared >(); std :: shared_ptr p2 {p, & p-> (n)}; ' –

+0

Ah bu daha uygun, evet – ujvl

+1

Bu soru gerçekten iyi bir soru. Daha önce hiç sorun yaşamadım ama gelecek için minnettarım. – ZeroUltimax

cevap

17

Kullanılacak gerekir aliasing constructor:

template< class Y > 
shared_ptr(const shared_ptr<Y>& r, element_type* ptr) noexcept; 

Bu verilen shared_ptr sahipliği paylaşan, ama bu bir değil, bunu vermek işaretçi göre temizlemek için emin olur.

shared_ptr<T> ptr_at_offset(int offset) { 
    return {sp, sp.get() + offset}; 
} 
İlgili konular