¿Cómo leer un bloque de datos de un archivo usando punteros inteligentes?
Frecuentes
Visto 486 veces
1
Al usar punteros en bruto pude hacer eso:
std::vector< Vector3* > vertices;
Vector3* v = new Vector3[amount];
fread(v, sizeof(Vector3), amount, file);
for ( int i = 0; i < amount; ++i )
vertices.push_back( &v[i] );
Ahora bien, ¿cómo hacer lo mismo con los punteros inteligentes? Me intentaron algo como esto:
std::vector< std::unique_ptr< Vector3 > > vertices;
std::unique_ptr< Vector3 >* v = new std::unique_ptr< Vector3 >[amount];
fread(v, sizeof(Vector3), amount, file);
for ( int i = 0; i < amount; ++i )
vertices.push_back( std::move( v[i] ) );
delete [] v;
tiene algun sentido? Compila y funciona, pero me temo que la última instrucción (delete [] v;
) ¿es esto correcto?
1 Respuestas
2
Tómalo con calma
std::vector<Vector3> vertices(amount);
assert(!vertices.empty());
fread(&vertices[0], sizeof(Vector3), amount, file);
Respondido el 21 de Septiembre de 13 a las 12:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ memory-leaks smart-pointers or haz tu propia pregunta.
Estaba ciego. Gracias por mostrarme que ni siquiera necesito consejos;) - tom