C 싱글턴 예제
C에서 싱글턴 패턴은 프로그램 실행 전체에서 클래스에 인스턴스가 하나만 있도록 보장합니다. 다음은 싱글톤 구현의 향상된 샘플입니다.
<code class="cpp">class A { private: static A* m_pA; explicit A(); // Constructor should be private A(const A&) = delete; // Prevent copying A& operator=(const A&) = delete; // Prevent assignment virtual ~A(); // Destructor public: static A& GetInstance(); // Return a reference to the instance static void FreeInstance(); // Free the instance when no longer needed void WORK1(); void WORK2(); void WORK3(); }; A& A::GetInstance() { if (m_pA == nullptr) { static A instance; // Lazy initialization m_pA = &instance; } return *m_pA; // Return a reference to the instance } void A::FreeInstance() { delete m_pA; m_pA = nullptr; }</code>
토론:
포인터 반환을 피하는 이유는 무엇입니까?
제공된 샘플 코드는 처음에 Singleton 인스턴스에 대한 포인터를 반환합니다. 그러나 참조를 반환하는 것은 인스턴스의 수동 할당 해제를 방지하므로 싱글톤에 더 적합한 것으로 간주됩니다. 객체의 수명은 Singleton 클래스 자체에서 관리해야 합니다.
지연 초기화:
개선된 샘플은 지연 초기화를 달성하기 위해 함수 메서드로 초기화된 정적 변수를 사용합니다. 이 기술을 사용하면 필요할 때만 싱글톤이 생성되어 효율성이 향상됩니다.
파기 보장:
싱글톤은 참조를 반환함으로써 인스턴스가 조기에 파괴되지 않았습니다. 또한 싱글톤에 대한 참조가 자동으로 해제되므로 프로그램이 종료될 때 적절한 소멸을 처리합니다.
추가 참고 사항:
위 내용은 C 싱글톤 구현에 참조 반환이 선호되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!