이 있습니다. 나는 C++ #define 문에서 클래스 이름과 변수 이름 사이에 & 기호를 사용하는 것에 대해 혼란 스럽다.& 심볼의 C++ 전 처리기
globalhandling.hpp 파일에서 xbmc 소스 코드로 글로벌 싱글 톤을 만들었습니다.
필자는 비슷한 내용의 스 니펫을 작성하여 그 기능을 파악했습니다. 내가 실험 할 때 발견 한 것은 &이 하나의 생성자로만 사용되고 소멸자가 호출되었을 때입니다. 생략하면 하나의 생성자와 두 개의 소멸자가 호출됩니다.
&은이 상황에서 비트 및/또는 주소 연산자로 사용됩니까?
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
class aClass
{
public:
aClass() { cout << "Constructor\n"; }
aClass getInstance() { return *this; }
void printMessage() { cout << "Hello\n"; }
~aClass() { cout << "Destructor\n"; }
};
#define GLOBAL_REF(classname,variable) \
static boost::shared_ptr<classname> variable##Ref(new classname)
#define GLOBAL(classname,variable) \
GLOBAL_REF(classname,variable); \
static classname & variable = (*(variable##Ref.get()))
GLOBAL(aClass,aVariable);
int main()
{
aVariable.printMessage();
return 0;
}
이 보호 프로파일과는 아무 상관이 없습니다. 그것은 평범한 오래된 참조입니다. – chris
참조를 만들고 있습니다. –
왜'&'를 생략하면 두 소멸자가 호출됩니다. – user3625976