2013-09-21 62 views
1

當使用原始指針我能做到這一點:如何使用智能指針從文件讀取數據塊?

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]); 

現在,如何做智能指針一樣呢?我被試過這樣的事情:

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; 

它有什麼意義嗎?它編譯,它的工作原理,但恐怕最後的指令(delete [] v;)是正確的?

回答

2

別緊張

std::vector<Vector3> vertices(amount); 
assert(!vertices.empty()); 
fread(&vertices[0], sizeof(Vector3), amount, file); 
+0

我是個瞎子。感謝您向我展示我甚至不需要任何指示;) – Tom