C ++ Неизменяемый пользовательский класс, передаваемый по ссылке или значению

Я создал собственный класс, который включает в себя тонны чисел и вычисления строк. Я сделал свой класс неизменным, предоставляя только аксессоры, а не мутаторы. Как только объект сконструирован, его единственное свойство не изменяется.

Мой вопрос здесь, в настоящее время все из моих функций передаются по значению. Если у вас есть неизменный объект, нужен ли переход по ссылке? Является ли передача по значению расточительством с точки зрения памяти, поскольку копии должны постоянно создаваться?

Например:

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());
}
}

1

Решение

Передача по значению требует копирования. Если у вас большой класс, и вы платите за его копирование, вы можете сделать это по ссылке, чтобы избежать такого копирования.

Поскольку он неизменен, вы можете передать его по ссылке на 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());
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]