Я пытаюсь создать неизменный тип (класс) в C ++,
Я сделал так, чтобы все методы, называемые «функциями-членами», не модифицировали объект и вместо этого возвращали новый экземпляр.
Я сталкиваюсь с множеством проблем, но все они вращаются вокруг ссылочных типов в C ++.
Один пример - передача параметров одного и того же типа класса по ссылке:
Imm Imm::someOp( const Imm& p_im ) const
{
...
p_im = p_im.someOtherOp(); //error, p_im is const, can't modify it!
...
}
Ошибка вызвана передачей значения по ссылке.
Если бы вместо этого я передавал ссылку по значению, то приведенная выше строка ошибки не была бы ошибкой!
Рассмотрим пример Java / C #
class Imm
{
...
Imm someOp( Imm p_im )
{
....
p_im = p_im.someOtherOp(); //ok, you're not modifying the
//original object, just changing the local reference
....
}
....
}
Как я могу сделать что-то подобное в C ++? Я знаю, что могу использовать указатели, но затем я сталкиваюсь со всем беспорядком управления памятью. Я не хочу беспокоиться о том, кто владеет ссылками на объекты.
В идеале я бы хотел, чтобы класс был похож на неизменяемые строки в python; вы можете использовать их, даже не замечая и даже не зная, что они неизменны, и они просто ведут себя так, как вы ожидаете; они просто работают.
EDIT
Конечно, я могу обойти это, передавая по значению или используя временную переменную (что я сейчас и делаю). Я спрашиваю о том, «как передавать ссылки по значению в C ++»
Я ожидаю, что ответ будет вращаться вокруг чего-то в STL, сейчас я изучаю семейство шаблонов smart_ptr.
UPDATE
Спасибо за ответы, я понимаю, что нет указателей. (см. мой другой вопрос , который действительно является продолжением этого вопроса)