d- 포인터는 대부분 pimpl 패턴 중 하나의 구현입니다. 또한 초기 구현 중 하나입니다. "이름 'd-pointer'는 Qt에 처음 도입 된 Trolltech의 Arnt Gulbrandsen에서 유래되었습니다. 더 큰 릴리즈 사이에서도 바이너리 호환성을 유지할 수있는 최초의 C++ GUI 라이브러리 중 하나입니다. "Source
매크로를 사용할 때의 이점 중 하나는 컴파일시 중앙 위치에서 패턴 구현의 구현 세부 사항을 변경하는 것입니다. 예를 들어 코드 톤을 변경하지 않고 나중에 fast pimpl implementation으로 전환 할 수있는 옵션을 남겨 두도록 매크로를 디자인 할 수 있습니다 (잘하면 pimpl을 사용하는 경우에는 필요하지 않음 :-)). 매크로 디자인/구현에서 실수를하지 않았다면 ...
그러나 원본 트리에 대한 어떤 새로운 사용자도 암호를 사용하지 않으므로 매크로를 사용하지 않는 것이 좋습니다. 매크로는 종종 오류가 발생하기 쉽고 원본 소스 코드만큼 의미가없는 마법의 방언을 만듭니다. 또한 C Pre Processor와 관련된 모든 문제가 있습니다. 기본 언어를 인식하지 못합니다.
개인적으로 나는 d- 참조라고 부르는 것을 사용하고 싶습니다. 포인터 대신에 참조를 사용하고 d- 참조 할 필요가 없습니다. 8-) 다음과 같이 보입니다 :
// MyClass.h
class MyClass
{
public:
MyClass();
~MyClass();
// implementation methods
private:
class MyClassPrivate& d;
};
// MyClass.cpp
struct MyClassPrivate
{
int x;
};
MyClass::MyClass()
: d(*new MyClassPrivate)
{
}
MyClass::~MyClass()
{
delete &d;
}
// In methods use d.x
출처
2011-03-04 04:21:14
ppl
"그냥 pimpl"과 d- 포인터 사이에는 어떤 차이점이 있습니까? 매크로를 사용하여 작업을 자동화하는 경우는 제외됩니다. –