C++ 不可变自定义 class 按引用或值传递
C++ Immutable custom class pass by reference or value
我做了一个自定义 class,其中涉及大量的数字和字符串计算。我通过只提供访问器而不提供修改器使我的 class 不可变。一旦构建了对象,就不会更改它的单个 属性。
我的问题是,目前 所有 我的函数都是按值传递的。如果您有一个不可变对象,是否还需要通过引用传递?由于需要不断创建副本,因此按值传递在内存方面是否浪费?
例如:
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());
}
}
Pass-by-value 需要复制。如果你的 class 很大并且复制成本高,你可以 pass-by-reference 来避免这样的复制。
因为它是不可变的,你可以通过 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());
}
}
我做了一个自定义 class,其中涉及大量的数字和字符串计算。我通过只提供访问器而不提供修改器使我的 class 不可变。一旦构建了对象,就不会更改它的单个 属性。
我的问题是,目前 所有 我的函数都是按值传递的。如果您有一个不可变对象,是否还需要通过引用传递?由于需要不断创建副本,因此按值传递在内存方面是否浪费?
例如:
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());
}
}
Pass-by-value 需要复制。如果你的 class 很大并且复制成本高,你可以 pass-by-reference 来避免这样的复制。
因为它是不可变的,你可以通过 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());
}
}