>백엔드 개발 >C#.Net 튜토리얼 >C++ 디자인 패턴의 싱글톤 모드에 대한 간략한 소개

C++ 디자인 패턴의 싱글톤 모드에 대한 간략한 소개

黄舟
黄舟원래의
2017-01-18 15:07:331186검색

싱글턴 패턴이란 무엇인가요?

클래스에 인스턴스가 하나만 있는지 확인하고 이에 대한 전역 액세스 지점을 제공합니다. [DP]

클래스 자체가 유일한 인스턴스를 저장하도록 합니다. 이 클래스는 다른 인스턴스가 생성될 수 없음을 보장하며 이 클래스는 인스턴스에 액세스하는 방법을 제공할 수 있습니다. 【DP】

싱글톤 모드는 언제 필요한가요?

프로그램은 특정 기능을 제어하기 위해 한 가지 방법만 필요하며 두 번째 기능을 생성하는 것은 허용되지 않습니다. 예: 은행에서 사용하는 숫자 인식 기계.

싱글턴 모드를 사용하려면 C++static 키워드의 사용법을 이해해야 합니다. 이 블로그 게시물에서는 static을 간략하게 분석합니다.

테스트 사례:

[code]int main(){
    //单例模式初始化两个实例的方法
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();

    if(s1 == s2)
        std::cout << "Two the objects are the same instance.\n";
    else
        std::cout << "Two the objects are the different instance.\n";

    return 0;
}

싱글톤 모드 구현:

[code]class Singleton{
private:
    //将构造函数声明为私有的,从而保证只允许类内使用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
    static Singleton* getInstance(){
        if(instance != NULL){
            instance = new Singleton;
        }
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;

첨부: 멀티스레드 프로그래밍이라면 잠그고 비어 있는지 두 번 판단해야 합니다.

[code]class Singleton{
private:
    //将构造函数声明为私有的,从而保证只允许类内使用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
    static Singleton* getInstance(){

        if(instance != NULL){

            lock(syncObj){
               if(instance != NULL){
                   instance = new Singleton;
               }//if
            }//lock
        }//if
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;

두 스레드 중 하나만 들어갈 수 있고 다른 스레드는 줄을 서서 기다리도록 잠금이 추가됩니다. 첫 번째 스레드가 들어갔다가 나온 후에 후자가 들어갈 수 있습니다. 두 번째 null 판단은 첫 번째 스레드가 인스턴스를 생성하고 두 번째 스레드가 진입 후 더 이상 인스턴스를 생성하지 않도록 하는 것입니다.

위 내용은 C++ 디자인 패턴의 싱글턴 모드에 대한 간략한 소개 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.