问题描述
我有一个Array
类,构造新实例的成本很高。我定义了operator+
,以便能够像这样链接起来。
class Array
{
public:
//...
Array& operator+=(Array const&);
Array operator+(Array const&);
};
Array a,b,c,d;
Array e = a + b + c + d; //a+b->Temp,Temp+c->Temp2,Temp2+d->e,BAD!
我希望它能够使用operator+=
来节省构建新实例的成本,而不是使用operator+
来构建新实例。我尝试使用参考限定词,如下所示:
Array operator+(Array const&) &;
Array& operator+(Array const&) &&; //call += internally
但是在Temp+c->Temp
之后,Temp+d
将调用operator+() &
,它仍会创建新实例。
编辑:我尝试过
Array&& operator+(Array const&) &&
{
//...
return std::move(*this);
}
哪个似乎有用,但是它会悬挂吗?因为Array e = a + b + c + d;
将调用move构造函数将最终的临时变量移至e
中,所以我可以在move构造函数中做一些技巧,以防止在表达式之后存储临时变量时释放资源,如果我是对的
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)