C++中减少内存拷贝的小技巧
1,在函数参数中使用&来代替,避免在调用函数时进行拷贝构造
class CTset { public: CTset() { cout << "construct a CTest" << endl; } CTset(const CTset& A) { cout << "Copy Constructor a CTest" << endl; } ~CTset() { cout << "destroy a CTest" << endl; } int ID; };
int getCTestIDByRef(const CTest& test) { cout << "使用引用" << endl; return test.ID; }
int getID(CTest test) { cout << "不使用引用" << endl; return test.ID; }
int main() { CTest a; getCTestIDByRef(a); getID(a); return 0; }
控制台打印结果如下,可以看到使用引用可以避免一次拷贝构造,当因为引用实际就是给变量起一个别名,如果不使用引用会在函数中构造一个临时的变量a,函数结束后再析构,当参数所占内存较大时显然会影响效率;
2,将函数参数改为指向变量的指针
既然函数参数内存太大,为了避免函数调用时产生的不必要的复制构造,干脆直接用指针。考虑到内存的释放问题,可以用智能指针处理;
3,使用右值引用和std::move,参考下面这篇博客