我有一个使用新位置的自定义内存分配器。然后我有一个具有私有构造函数的类,当我尝试使用我的内存分配器时,它抱怨构造函数是私有的。
这是我的函数,它分配内存并使用placement new调用构造函数:
template <class T, typename arg0>
inline T* AllocateObject(arg0& a0) { return new (InternalAllocate(sizeof(T))) T(a0); }
这是我要分配的课程:
/* MeshPtr definition */
typedef boost::shared_ptr<Mesh> MeshPtr;
/* Mesh defintion */
class Mesh
{
public:
static MeshPtr CreateMesh(IVertexBuffer* vertexBuffer);
~Mesh();
IVertexBuffer* GetVertexBuffer();
private:
Mesh(IVertexBuffer* vertexBuffer);
IVertexBuffer* mVertexBuffer;
};
MeshPtr Mesh::CreateMesh(IVertexBuffer* vertexBuffer)
{
return MeshPtr(HeapAllocator::GetDefaultHeapAllocator().AllocateObject<Mesh>(vertexBuffer), boost::bind(&HeapAllocator::DeallocateObject<Mesh>, &HeapAllocator::GetDefaultHeapAllocator(), _1));
}
如前所述,错误是error C2248: 'Mesh::Mesh' : cannot access private member declared in class 'Mesh'
有没有好的方法解决这个问题?