【发布时间】:2012-12-29 12:48:18
【问题描述】:
我有一个使用新位置的自定义内存分配器。然后我有一个具有私有构造函数的类,当我尝试使用我的内存分配器时,它抱怨构造函数是私有的。
这是我分配内存并使用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'
有什么好办法吗?
【问题讨论】:
-
是否可以选择将分配器声明为好友?
-
如果没有其他选项是
标签: c++ memory-management placement-new