我制作了一个涉及大量数字和字符串计算的自定义类。我只通过提供访问器和没有变换器使我的类不可变。一旦构造了对象,就不会改变它的单个属性。
我的问题是,目前所有我的函数都是按值传递的。如果你有一个不可变的对象,甚至需要通过引用传递?由于需要不断创建副本,因此在内存方面是否会浪费价值?
例如:
class MyInteger
{
private:
const int val;
public:
MyInteger(const int a) : val(a) { };
int getValue() const { return val; }
MyInteger add(const MyInteger other)
{
return MyInteger(val + other.getValue());
}
}
答案 0 :(得分:1)
按值传递需要复制。如果您的班级很大且复制成本,您可以通过引用进行传递以避免此类复制。
因为它是不可变的,你可以通过reference-to-const传递它。
class MyInteger
{
private:
const int val;
public:
MyInteger(const int a) : val(a) { };
int getValue() const { return val; }
MyInteger add(const MyInteger& other) const // Note this is passed by reference to const now
// ~
{
return MyInteger(val + other.getValue());
}
}