나는 rvalue 레퍼런스가 클래스의 디자인에 어떻게 영향을 주는지 평가하려고했다. 장소를 rvalue 참조와평평한 참조와 클래스 디자인
//another module
{
string configvalue;
X x;
//read configvalue from a file and call set
...
x.set_data(configvalue.c_str());
//use x to do some magic
..
...
}
이 더 나은 것 때문에
처럼 다른 멤버 함수를 제공하기 위해 :이 클래스는 다음과 같은 다른 모듈에 의해 사용되는class X
{
string internal;
public:
void set_data(const char* s)
{
internal = s;
}
..
..
..
//other stuff
};
아래와 같이 나는 기존의 클래스가 말
class X
{
...
...
....
void set_data(string s)
{
internal = std::move(s);
}
};
이렇게하면이 클래스의 클라이언트는 이동 의미 체계를 사용하고 사용 당 하나의 할당/복사 작업 집합을 방지 할 수 있습니다. 이것은 매우 복잡한 예이지만 '최소 인터페이스'패러다임을 깨지 않고 모든 클래스 디자인에 동일한 원리가 적용됩니다.
이 문제에 대한 통찰력이 있으면 대단히 감사하겠습니다.
제안 사항을 코딩 했습니까? –
@HowardHinnant 아니요. – SomeWittyUsername
예. 처음 두 개의'set_data'를 구현하고 rvalue'string'을 호출 할 때, 제 컴파일러는 모호함을 호소합니다. 세 번째'set_data' 오버로드를 추가 할 때, lvalue'string'을 호출 할 때 모호함을 갖습니다. –