(처음에는 무엇보다도 내 영어는 유감입니다.)이것은 어느 정도까지 나쁜 행동이 될 수 있습니까? [원형 의존성]
순환 의존성의 통사 적 제한을 피하기 위해 다음 제안 된 해결책이 실제로 해결책인지 아니면 더 많은 단점이 있는지 알고 싶습니다 adventages보다 (하자 날이 상호 의존도가 inavoidable 것을 suposse) :
원래 상황 :
class B;
class A
{
B needed;
};
class B {};
출력 :
B has an incomplete type.
"솔루션"
template<typename T = class B>
class tricky_A
{
static_assert(is_same<T, B>::value, "Too tricky!!");
T needed;
};
class B {};
using A = tricky_A<>;
int main()
{
A a; // At the instantiation point, B isn't an incomplete type.
}
출력 :
No problems.
일반적인 솔루션은 포인터를 사용하는 것입니다,하지만 당신이 정말로 그들을 필요로하지 않을 때 나는 두 가지 문제를 참조하십시오
1) 다른 로컬 객체에 대한 포인터를 유지하기로 결정한 경우, 객체의 수명이 "보유 된"객체의 수명보다 짧아야합니다 (또는 클래스의 사용자가 확신해야합니다).
2) 동적 메모리를 처리하기로 결정한 경우 메모리를 예약하고 소멸시키는 데 시간을 소비해야하며 코드 예외를 안전하게하기 위해 예외 처리를 처리해야합니다.
*) 더 긴 코드; 작은 가독성; 더 열등한 예지;
이 "솔루션"을 사용하여 다른 솔루션을 검색해야합니까?
수정 : 괜찮습니다. 이것은 진정한 순환 의존이 아니므로 물어볼 것이 없습니다. 이 질문은 닫을 수 있습니다.
EDIT2 : 더 좋은 질문입니다. here.
예제에는 순환 종속성이 표시되지 않습니다. 그것은 그것들에 대해 추론하기가 어렵습니다. –
문제 1)을 해결하기 위해 똑똑한 포인터를 사용할 수 있습니다 –
좋은 트릭 :) <...> –