Lecture et écriture de vecteur C ++ dans un fichier

Pour certains, le travail graphique j'ai besoin de lire une grande quantité de données aussi rapidement que possible et l'idéal serait de directement lire et écrire les structures de données sur le disque. Fondamentalement, j'ai un chargement des modèles 3d dans divers formats de fichiers qui prennent trop de temps à charger donc je veux les écrire dans leur "préparé" format comme un cache qui se chargent beaucoup plus rapidement sur les exécutions ultérieures du programme.

Est-il sécuritaire de le faire de cette façon?
Mes soucis sont directement autour de la lecture des données du vecteur? J'ai enlevé la vérification des erreurs, codé en dur 4 que la taille de l'int et ainsi de suite afin que je puisse donner un court exemple de travail, je sais que c'est un mauvais code, ma question est vraiment s'il est sûr en c++ pour lire toute une gamme de structures directement dans un vecteur comme cela? Je crois qu'il en soit ainsi, mais le c++ a beaucoup de pièges et indéfini comportements quand vous commencez à aller de bas niveau et de traiter directement avec la mémoire brute comme ça.

Je me rends compte que nombre de formats et de tailles peuvent changer à travers les plates-formes et les compilateurs, mais cela ne pourra même être lu et écrit par le même compilateur programme pour mettre en cache les données nécessaires sur un plus tard l'exécution du même programme.

#include <fstream>
#include <vector>

using namespace std;

struct Vertex
{
    float x, y, z;
};

typedef vector<Vertex> VertexList;

int main()
{
    //Create a list for testing
    VertexList list;
    Vertex v1 = {1.0f, 2.0f,   3.0f}; list.push_back(v1);
    Vertex v2 = {2.0f, 100.0f, 3.0f}; list.push_back(v2);
    Vertex v3 = {3.0f, 200.0f, 3.0f}; list.push_back(v3);
    Vertex v4 = {4.0f, 300.0f, 3.0f}; list.push_back(v4);

    //Write out a list to a disk file
    ofstream os ("data.dat", ios::binary);

    int size1 = list.size();
    os.write((const char*)&size1, 4);
    os.write((const char*)&list[0], size1 * sizeof(Vertex));
    os.close();


    //Read it back in
    VertexList list2;

    ifstream is("data.dat", ios::binary);
    int size2;
    is.read((char*)&size2, 4);
    list2.resize(size2);

     //Is it safe to read a whole array of structures directly into the vector?
    is.read((char*)&list2[0], size2 * sizeof(Vertex));

}

source d'informationauteur jcoder