사용자가 시스템과의 인터페이스에 사용하는 클래스가 있습니다. 이 클래스는 내부를 숨기기 위해 Pimpl을 사용하므로 실제 구성원 만이 모든 작업을 수행하는 숨겨진 실제 객체에 대한 참조입니다.참조 의미가있는 Const 오브젝트
클래스에는 참조 의미가 있기 때문에 대개 포인터와 비슷한 값으로 전달됩니다. 이로 인해 const
의 정확성 문제가 발생합니다. const
값을 const
값으로 간단히 복사하여 클래스의 특성을 매우 쉽게 깨뜨릴 수 있습니다. 전체적으로 복사를 방지하는 것보다이를 방지 할 수있는 방법이 없습니다.
개체의 const
특성을 유지하는 const
값을 반환하고 싶습니다. 없이 새로운 수업이나 새로운 수업을 만드십시오.
는 기본적으로 나는 일이 발생하지 않도록하려면 :
struct Ref
{
int &t;
Ref(int &_t) : t(_t) {}
};
Ref MakeRef(int &t) { return Ref(t); }
int main()
{
int foo = 5;
const Ref r(foo);
const Ref c(r); //This should be allowed.
Ref other = MakeRef(foo); //This should also be allowed.
Ref bar(r); //This should fail to compile somehow.
return 0;
}
모든 후, 내가 직접 한 경우에 작동하지 않을 것입니다 : 당신이 요구하는 것은 불가능하다
int &MakeRef(int &t) {return t;}
int main()
{
int foo = 5;
const int &r(foo);
const int &c(r); //This compiles.
int &other = MakeRef(foo); //This compiles.
int &bar(r); //This fails to compile.
return 0;
}
복사 생성자를 private으로 설정할 수 있습니다. –
@JonathanPotter : 아무도 이유없이 복사 할 수 없습니다. –
복사 생성자를 삭제하고 비 const 참조를 허용하는 생성자를 만드는 것은 어떨까요? – syam