#include <string>
#include <string.h>
#include <algorithm>
#include <unistd.h>
#include <thread>
using namespace std;
template<class T, typename... Args>
class OperatorMallocAndFree
{
public:
static T* Malloc()
{
T* pData = NULL;
while(!pData){
try{
pData = new T;
}
catch(...){}
}
return pData;
}
static T* Malloc(T nValue)
{
T* pData = NULL;
while(!pData){
try{
pData = new T(nValue);
}
catch(...){}
}
return pData;
}
static T* MallocArray(long nSize)
{
T* pData = NULL;
while(!pData){
try{
pData = new T[nSize];
}
catch(...){}
}
return pData;
}
static T* MallocClass(Args... args)
{
T* pData = NULL;
while(!pData){
try{
pData = new T(std::forward<Args>(args)...);
}
catch(...){}
}
return pData;
}
static void Free(T** pData)
{
T* pTmp = * pData;
delete pTmp;
pTmp = NULL;
}
static void FreeArray(T** pData)
{
T* pTmp = * pData;
delete[] pTmp;
pTmp = NULL;
}
};
class A
{
public:
A(void){};
A(long n, const string& str){
printf("%d %s\n", n, str.c_str());
}
};
int main()
{
char* p = OperatorMallocAndFree<char>::Malloc();
char* pStr = OperatorMallocAndFree<char>::MallocArray(1024);
strcpy(pStr, "123123123123");
long n = 123;
string s = "1231231231";
A* pData = OperatorMallocAndFree<A, long, string>::MallocClass(n, s);
OperatorMallocAndFree<char>::Free(&p);
OperatorMallocAndFree<A>::Free(&pData);
OperatorMallocAndFree<char>::FreeArray(&pStr);
return 0;
}
编译:g++ -std=c++11 test.cpp -o ./testApp -lpthread