プレースメント 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'
これを回避する良い方法はありますか?