我有一个矢量类,有加法,乘法,减法,除法等运算符。我试图优化我的程序(它执行了很多矢量操作),并且我意识到花费的时间大约有50%是在构建和破坏矢量。我知道这是因为每次我为矢量调用一个非复合数学运算符时,都会构造一个新矢量。有没有一种方法来防止这种情况,而不使用复合运算符或扩展向量操作?在非复合操作中有没有办法阻止施工?
如果我有:
Vector a = Vector(x, y, z);
Vector b = Vector(a, b, c);
Vector c = a + b;
我不能使用+ =,因为c是一个完全新的载体。我知道我可以加速它:
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
但这看起来不像使用运算符那样干净。
那么假设第三个向量已经被构造了。我只想修改其组件,而不是创建一个新的矢量,并将新矢量的组件复制到已经构建好的组件中。这是浪费。另外,如果我在一行中执行多个操作,则将为每个这些操作创建一个新的向量,这是不必要的。 – Stewart 2009-11-30 02:02:05
减少创建的临时对象的一个好方法是通过为Vector类实现移动构造函数和移动赋值运算符来模拟C++ 0x移动语义。你需要将你返回的临时对象封装成类似于MyVector_move_t类的类。请参阅我编辑帖子中提到的文章,了解更多关于此操作的信息。最好的部分是,当C++ 0x出现时,您可以用真正的移动构造函数替换假的移动构造函数。 – 2009-11-30 02:11:40