我正在尝试在 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 中的不可变字符串;您可以在没有注意到甚至不知道它们是不可变的情况下使用它们,并且它们的行为符合您的预期;他们只是工作。
编辑
当然,我可以通过按值传递或使用临时变量(这是我目前正在做的)来解决它。我要问的是“如何在 C++ 中按值传递引用”
我期待答案围绕 STL 中的某些内容展开,我目前正在研究 smart_ptr 模板系列。
更新
感谢您的回复,我意识到指针无法逃脱。(见我的另一个问题,这真的是对这个问题的跟进)