Я создал собственный класс, который включает в себя тонны чисел и вычисления строк. Я сделал свой класс неизменным, предоставляя только аксессоры, а не мутаторы. Как только объект сконструирован, его единственное свойство не изменяется.
Мой вопрос здесь, в настоящее время все из моих функций передаются по значению. Если у вас есть неизменный объект, нужен ли переход по ссылке? Является ли передача по значению расточительством с точки зрения памяти, поскольку копии должны постоянно создаваться?
Например:
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());
}
}
Передача по значению требует копирования. Если у вас большой класс, и вы платите за его копирование, вы можете сделать это по ссылке, чтобы избежать такого копирования.
Поскольку он неизменен, вы можете передать его по ссылке на 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());
}
}
Других решений пока нет …