要只能通过自定的导出函数来new 一个类实例,而且为了防止类被只接创建,把类构造函数设为protect,
所以开放给外部用的导出函数想要new 这个类的实例,就得设为这个类的friend.
但是不知道这个Create应该用什么格式书写,编译不通过,郁闷,希望大家能帮帮忙!
--------------------------Base.h
class CBase
{
protected:
//这friend应该怎么写?
friend CBase* Create();
//friend __declspec(dllexport) CBase* Create();
CBase();
public:
virtual void DeleteThis();
virtual ~CBase();
private:
};-------------------------Base.cpp
#include "stdafx.h"
#include "Base.h"CBase::CBase()
{
}
CBase::~CBase()
{
}
void CBase::DeleteThis()
{
delete this;
}extern "C" __declspec(dllexport) CBase* Create()//
{
return new CBase();
}
所以开放给外部用的导出函数想要new 这个类的实例,就得设为这个类的friend.
但是不知道这个Create应该用什么格式书写,编译不通过,郁闷,希望大家能帮帮忙!
--------------------------Base.h
class CBase
{
protected:
//这friend应该怎么写?
friend CBase* Create();
//friend __declspec(dllexport) CBase* Create();
CBase();
public:
virtual void DeleteThis();
virtual ~CBase();
private:
};-------------------------Base.cpp
#include "stdafx.h"
#include "Base.h"CBase::CBase()
{
}
CBase::~CBase()
{
}
void CBase::DeleteThis()
{
delete this;
}extern "C" __declspec(dllexport) CBase* Create()//
{
return new CBase();
}
--------------------------Base.h
class CBase
{
friend __declspec(dllexport) CBase* Create();
protected:
CBase();
public:
virtual void DeleteThis();
virtual ~CBase();
private:
};
__declspec(dllexport) CBase* Create();-------------------------Base.cpp
#include "stdafx.h"
#include "Base.h"CBase::CBase()
{
}
CBase::~CBase()
{
}
void CBase::DeleteThis()
{
delete this;
}__declspec(dllexport) CBase* Create()//
{
return new CBase();
}
只能用别的办法了?
{
char *p = new char[sizeof(CBase)*elems]; // 每个元素的独立初始化
int offset = sizeof( CBase );
for ( int ix = 0; ix < elems; ++ix )
{
new( p+offset*ix ) CBase();//实现一个公有的带缺省参的构照函数
}
}