特点:
1、只能被初始化一次(不能提供public的构造函数和析构函数)
2、不能被拷贝(不能提供拷贝构造函数、赋值函数)
示例:
Windows中进行socket开发时,要load Ws2_32.lib,同时还要调用WSAStartup和WSACleanup来初始化和释放资源,使用中只要初始化一次就可以,这时候就可以通过单实例来实现。
头文件
#pragma once
class CWinSockInit
{
public:
static CWinSockInit& GetInstance(); //必须是静态
private:
CWinSockInit();
~CWinSockInit();
CWinSockInit(const CWinSockInit&) = delete; //不提供拷贝构造函数
CWinSockInit& operator=(const CWinSockInit& ) = delete; //不提供赋值函数
};
实现
#include <winsock2.h>
#include <stdio.h>
#include "CWinSockInit.h"
#pragma comment(lib,"Ws2_32.lib")
CWinSockInit& CWinSockInit::GetInstance()
{
static CWinSockInit oWinSockInit;
return oWinSockInit;
}
CWinSockInit::CWinSockInit()
{
WSADATA wsaData = { 0 };
// Initialize Winsock
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (0 != iResult) {
printf("WSAStartup failed: %d\n", iResult);
return ;
}
printf("Start\n");
}
CWinSockInit::~CWinSockInit()
{
WSACleanup();
printf("Close\n");
}
使用方法:
CWinSockInit::GetInstance();