이 내 회사는 C++의 참조 횟수 객체 구현하는 방법이다 : 당신이 참조 카운트 클래스를 만들 필요가 그래서C++ 참조 계산 : 매크로를 사용하여 이점을 얻으시겠습니까?
#ifndef DECLARE_REF_COUNT
#define DECLARE_REF_COUNT \
public: \
void Ref() { atomic_inc(_refs); } \
void UnRef() { \
int n = atomic_dec(_refs); \
if (n <= 0) { \
delete this; \
} \
} \
private: \
volatile int _refs;
#endif
을, 당신이 할 : 당신이 그것을 사용하는 경우
class MyClass {
DECLARE_REF_COUNT;
public:
...
};
, 당신이 할 :
myobj->Ref();
...
myobj->UnRef();
가 수동으로 참조하고 UnRef 필요하지 않는 내가, 내 선두 주자로 공유 포인터를 사용하여 제안,하지만 내 리더 매크로 방식을 선호 그는 UnRef()가 매우 기본적이고 우리가 이것을 잊지 않을 사람들을 고용하지 않기 때문에 UnRef()를 잊지 않을 것이라고 말했다. 매크로를 사용하는 또 다른 이유는 명시적인 Ref 및 UnRef가 필요할 때 더 많은 제어를 제공하기 때문입니다. 그래서 부스트가 없으며 C++ 11이 없다고 가정하면 매크로가 그렇게 할 수있는 좋은 방법일까요? 그리고이 방법의 장점과 단점은 무엇입니까?
http://thedailywtf.com에 제출해야합니다. 정상적인 회사에서는 참조 횟수와 모든 메소드가 수퍼 클래스가되며 참조 카운트를 원하는 클래스는 그 클래스에서 상속받습니다. –
"우리는 이것을하는 것을 잊어 버릴 사람들을 고용하지 않습니다"이것은 "나는 당신의 주장에 대해 신경 쓰지 않습니다"에 대한 일반적인 완곡 어법입니다. 상사가 마음을 바꾸게하는 논리적 인 논쟁은 없으니 그냥 해보십시오. – dasblinkenlight
나는 '휘발성 (volatile)'이 당신을 돕기 위해 무엇인가를하고 있다고 생각하지 않는다. 상속하지 않으려는 경우를 제외하고는 다중 상속 "diamond"를 피하거나 템플릿 클래스를 작성하는 경우를 제외하고는 @SamVarshavchik을 참조하십시오. http://stackoverflow.com/q/8819095/10077 –