복사 생성자가 있다고 가정합니다. 이 생성자는 복사 된 객체를 lvalue 참조로 전달하여 함수 계층을 호출합니다.lvalues 및 rvalues에 대한 코드 재사용
이제 기본적으로 복사 생성자와 동일한 함수 계층 구조를 사용할 수있는 이동 생성자가 있습니다. rvalue 인수를 lvalue 계층 구조에 전달할 수 있으므로이 작업을 수행 할 수 있습니다.
그러나 어딘가에 계층 구조에서 나는 lvalue 경우에 리소스를 복사하고 rvalue 경우에 리소스를 '훔칠'기능이 있습니다.
해당 함수에 전달 된 lvalue 참조가 rvalue에서 유래했는지 여부를 결정하는 방법이 있습니까? 나는 그렇지 않다. 또는 복사 및 이동 구조에 사용할 수 있고 거의 기능이 거의 다른 복사 기능 계층 구조가있는 경우 일반적인 방법은 무엇입니까?
코드 샘플 :
class A{
A(const A& a){
initFrom(a);
}
A(A&& a){
initFrom(a);
}
void initFrom(const A& a){
// call a hierarchy of functions, of which one of them calls initResource(const A&)
}
void initResource(const A& a){
if(a == rvalue reference){ // **** Here's the question... ****
// steal resource
this->ptr = a.ptr;
a.ptr = nullptr;
}
else{
// copy resource
this->ptr = allocate...
copy from a.ptr to this->ptr
}
}
우리에게 보여줄 수있는 예가 있습니까? –
'enable_if'와'is_rvalue_reference'가 도움이 될듯한 느낌이 들지만, 코드 샘플 (MCVE)은 더 많은 문맥을 제공합니다. – Niall
누군가가 질문을 향상시킬 것을 요구할 때, 질문의 끝 부분에 물건을 넣고 "요청시 X 추가"라고 말하지 마십시오. 오히려, 전체적으로 더 나을 수 있도록 * 귀하의 질문을 재 작업하십시오. –