Ist es möglich, std :: vector über den bereits zugewiesenen Speicher zu initialisieren?

Meine Frage ist ziemlich einfach und ich bin ziemlich überrascht, dass ich nichts Ähnliches finden kann. Wahrscheinlich ist es einfach oder total dumm (oder ich kann nicht suchen).

Wie der Titel sagt, ist es möglich, zu verwendenstd::vector auf bereits zugewiesenen Speicher, so dass es keine neuen Elemente von Anfang an zuweist, sondern verwendet, was gegeben ist. Ich würde es mir so vorstellen:

T1 *buffer = new T1[some_size];
std::vector<T2> v(buffer, some_size); // <- ofc doesn't work

Das Gegenteil ist ganz einfach und (vielleicht nicht hübsch, aber) funktioniert:

std::vector<T2> v(some_size);
T1 *buffer = &v[0];

Der Speicher ist garantiert kontinuierlich und daher so sicher wie ein Iterator.

Meine Motivation ist ganz einfach. Ich übergebe einige rohe Speicherdaten, d. H. Bytes, und da ich ihre Interpretation an einigen anderen Stellen kenne, möchte ich sie wieder in etwas Sinnvolles umwandeln. Ich könnte ein machenreinterpret_cast und verwenden Sie ein normales Array im C-Stil, aber ich bevorzuge C ++ - Funktionen.

Ich habe das Gefühl, dass dies sicher sein sollte, da wir das Eigentum daran aufgebenbuffer zu Vektor, weil es in der Lage sein muss, neu zuzuweisen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage