我有以下类结构:
class Base{
public:
Base() {}
Base(const Base& b){
cout << "Base Copy" << endl;
*this = b;
}
Base baseOperation(Base& base){
return Base();
}
};
class Derived : public Base{
public:
Derived(){}
Derived( const Base &d ) : Base(d)
{
cout << "Derived Copy: " << endl;
}
Derived operation(Derived& input){
return baseOperation(input);
}
};
Base基本上是我正在使用的库。它有一个名为baseOperation的运算符,它接收并返回一个输出;我想绕过那个输出但是没有同时制作基础和派生的副本。现在制作双份副本会减慢我的节目速度。有没有办法避免这个
答案 0 :(得分:0)
这里唯一的副本可能是在
的return语句中构造Derived对象时Derived operation(Derived& input){
return baseOperation(input);
}
RVO消除了所有其他复制操作。当然,如果您可以访问Base
的来源,则可以将复制更改为移动。但也许值得考虑聚合而不是继承。