2009-12-04 5 views
1

기본적으로 메모리 관리를 중앙 집중화하려고 시도 할 때 매우 약점을 보이고 있습니다. 어쨌든 boost :: pool은 특정 크기의 덩어리를 사용합니다.부스트 풀 맵?

내 orignal 아이디어, 새 오버로드 및 삭제, 해당 부스트 풀로 이동하고 거기에서 할당하는 싱글 톤으로 크기를 전달했다. 내가 부스트 풀의지도를 가질 수 없습니다처럼 MSVC9 나에게 다음과 같은 오류를 제공하기 때문에

std::map<size_t, boost::pool<> > m_MemPools; 

어쨌든 왜 이런 일이 될 것이다

:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\map(173) : error C2512: 'boost::pool<>::pool' : no appropriate default constructor available 

, 보인다?

편집 난 그냥 문제를 해결하는 shared_ptr을, 그것을 포장 결국, 그것을 해결.

그냥 뭔가를 보여주기 위해, 그것은 표준 : make_pair과 관련이있다 추측,

class Pooly 
{ 
public: 

    Foo() 
    { 
    } 

    void RegisterPool(__in const size_t poolSize) 
    { 
     if(pools.find(poolSize) == pools.end()) 
      pools.insert(std::make_pair(poolSize, boost::pool<>(poolSize))); 
    } 
private: 
    std::map<size_t, boost::pool<> > pools; 
}; 

임 난 더 이상 []를 사용하지 않으며, 여전히이 오류를 준다?

Etherwrap을 포장하면 스마트 포인터가 잘 작동하므로 부스트 풀에 포함시켜야합니다.

+0

해결하려는 문제는 무엇입니까? 왜 "메모리 관리를 중앙 집중화"해야합니까? OS가 이미 당신을 위해하는 일이 아닙니까? – jalf

답변

1

[] 연산자를 사용하여지도에 삽입하고 있습니까? 이렇게하려면 data_type (이 경우 boost::pool)이 기본 구성 가능해야합니다. 즉, 인수를 취하지 않는 기본 생성자가 있어야합니다. 그러나 boost::pool에는 기본 생성자가 없습니다.

+0

[] 전화가 제거됩니다. 이 오류가 발생합니다. 오류 C2248 : '부스트 : simple_segregated_storage :: simple_segregated_storage를'클래스에 선언 private 멤버 '부스트 :: simple_segregated_storage ' 나는 그것이 기본적으로 그냥 다른 것을 시도해야 할게요에 액세스 할 수 없습니다? – UberJumper