C++에서 변경할 수없는 형식 (클래스)을 만들려고합니다.C++에서 값을 기준으로 참조를 전달하는 방법은 무엇입니까?
모든 메서드 "aka member functions"이 개체를 수정하고 대신 새 인스턴스를 반환하도록 만들었습니다.
저는 많은 문제를 겪고 있지만, 모두 C++의 참조 유형에 중점을두고 있습니다.
일례 참조 동일한 클래스 유형의 파라미터를 전달하는 경우 :
Imm Imm::someOp(const Imm& p_im) const
{
...
p_im = p_im.someOtherOp(); //error, p_im is const, can't modify it!
...
}
오류는 참조 값을 전달함으로써 야기된다. 대신 값으로 참조를 전달하면 위의 오류 줄은 오류가 아닙니다.
은 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
....
}
....
}
이 어떻게 이런 일을 할 수있는 Java/C# 예제를 고려? 포인터를 사용할 수는 있지만 전체 메모리 관리가 엉망이됩니다. 나는 객체에 대한 참조를 소유하고있는 사람에 대해 걱정하고 싶지 않습니다.
이상적으로 나는 클래스를 파이썬에서 불변의 문자열처럼 디자인하고 싶습니다. 당신은 그들이 변하지 않는다는 것을 알아 채거나 심지어 알지 못하는 사이에 그것들을 사용할 수 있으며, 당신이 예상대로 행동합니다; 그들은 단지 작동합니다.
편집 내가 전달별로 값 또는 (내가 현재 뭘하는지 인) 임시 변수를 사용하여 주위를 얻을 수 있습니다 물론
. 내가 물어 보는 것은 "C++에서 값으로 참조를 전달하는 방법"이다.
나는 STL에서 뭔가를 중심으로 답할 것을 기대하고있다. 현재 템플릿의 smart_ptr 패밀리를 찾고있다. 응답에 대한
UPDATE
덕분에, 나는 탈출이 포인터에서 없다 실현. (내 other question을 참조하십시오.이 내용은 실제 후속 작업입니다.)
을 사용할 수 있습니다 인스턴스 B에있는 메소드에 "Imm", "someOp"및 "someOtherOp"의 의미를 설명 할 수 있을까요? 컴파일러가 불변의 객체를 변경하지 못하게하는 것처럼 보입니다. –
그건 중요하지 않아, 일반적인 대답이 필요해. 왜 인스턴스를 매개 변수로 메소드에 보냅니 까? 음, 문자열 연결을 고려하십시오 : str1.append (str2) – hasen