use*_*171 1 c++ memory-management copy vector
使用带类的向量时,我遇到意外的性能下降.
我有一个csv_File类,它读入csv文件并将内容存储在2D矢量中.有一个允许访问的成员函数,例如
csv_File file("file.csv");
file.access(2,2);
Run Code Online (Sandbox Code Playgroud)
访问2,2元素.
然后,我有另一个类csv_Array在向量中存储多个csv_File对象,例如私有成员向量有一个允许访问的成员函数,即它返回一个csv_File对象,例如:
csv_Array file_array(5); //store 5 csv_File objects
file_array.grab(0).access(2,2);
Run Code Online (Sandbox Code Playgroud)
在第二行中,grab返回一个csv_File对象(在本例中是第一个),access是csv_File对象的成员函数.
但是,我注意到调用csv_Array.grab(0).access(2,2); 比它应该慢得多(它应该只是3个vector :: at calls).
是否有某种隐藏的副本正在使这个非常慢?
编辑:以下是一些相关的函数原型:
//Access in csv_File
std::string access(int row, int column);
//grab in csv_Array and csv_Analysis (mentioned below)
csv_File grab(int index);
Run Code Online (Sandbox Code Playgroud)
附加详细信息(如有必要):此代码的应用是将一堆csv文件加载到内存中,然后将其传递给将对数据进行一些计算的朋友类.原理上,我有以下内容:
1)csv_Array具有私有成员向量存储; 2)csv_Analysis是一个csv_Array的朋友的类3)csv_Analysis访问矢量存储,它位于csv_Array中4)这种访问是通过将csv_Analysis传递给csv_Array中的存储(因此没有希望复制....)来完成的,例如public:csv_Analysis(csv_Array&csv_block);
因此,上面给出的调用[file_array.grab(0).access(2,2); ]实际上还有一个额外的"级别",更像是
csv_Analysis analysis_Object(file_array);
analysis_Object.grab(0).access(2,2);
Run Code Online (Sandbox Code Playgroud)
其中grab以相同的方式起作用,并且也被定义为csv_Analysis类的成员函数.