Ich möchte unique und shared_ptr verwenden, um den zugewiesenen Speicher zu verwalten. Aber soweit ich sehen kann, ist der Zugriff auf den Speicher (get, ...) immer const und gibt const Zeiger zurück, so dass ich den gespeicherten Speicher nicht manipulieren kann.Wie kann ich den von std :: shared_ptr (unique_ptr) geschützten Speicher ändern?
Beispiel:
std::unique_ptr<int[]> ptr(new int[42]);
memset(ptr.get(),0,42*sizeof(int)); //not possible ptr.get() returns const pointer
Gibt es um eine Arbeit? Wenn es keine Möglichkeit gibt, den Speicher zu manipulieren, welche Gründe gibt es, eine solche Schnittstelle nicht anzubieten?
Warum wollen Sie 'memset' benutzen? Und warum benutzt man statt eines 'std :: vector' ein' std :: unique_ptr '? –
TartanLlama
Sie können nicht stehlen Speicher (Besitz Besitz wie Release) von std :: vector – user1235183
@ user1235183 es ist ein 'const Zeiger', nicht ein' Zeiger auf const' Sie können den Inhalt ändern, auf den es ohne Probleme zeigt. Aber Sie benötigen möglicherweise einige Umwandlungen, wenn Sie c-Funktionen wie memset verwenden möchten. – PeterT