Я хочу использовать уникальные и shared_ptr для обслуживания выделенной памяти. Но насколько я вижу, доступ к памяти (get, ...) всегда является константой и возвращает указатель const const, поэтому я не могу манипулировать хранящейся памятью.Как изменить память, защищенную std :: shared_ptr (unique_ptr)
Пример:
std::unique_ptr<int[]> ptr(new int[42]);
memset(ptr.get(),0,42*sizeof(int)); //not possible ptr.get() returns const pointer
Есть работа вокруг? Если нет способа манипулировать памятью, каковы причины дизайна, чтобы не предлагать такой интерфейс?
Почему вы хотите использовать 'memset'? И зачем использовать 'std :: unique_ptr' вместо 'std :: vector'? –
TartanLlama
вы не можете украсть память (взять на себя ответственность как release) из std :: vector – user1235183
@ user1235183 это 'const pointer', а не' указатель на const', вы можете изменить содержимое, на которое оно указывает, без каких-либо проблем. Но вам могут потребоваться некоторые приведения, если вы хотите использовать c-функции, такие как memset. – PeterT