Like this:
data.get()[3]
However, remember what Nathan said in the comments. The default deliter std::shared_ptr<unsigned char> invalid for the pointer highlighted by new[] . You will need to use std::shared_ptr::reset(Y* ptr, Deleter d); with appropriate debiter:
data.reset(new unsigned char[10], [](auto p){ delete[] p; });
Or, if you don't like the ugliness of lambda, you can define a reuse helper:
struct array_deleter { template<typename T> void operator()(const T* p) { delete[] p; } };
source share