2011-11-09 3 views
0

나는 fallowing 클래스가 있습니다추가 회원 부스트 : : ptr_vector <>

class CpuUsage { 
public: 
    CpuUsage(); 
    virtual ~CpuUsage(); 

    void SetCpuTotalTime(CpuCore _newVal); 
    CpuCore GetCpuTotalTimes(); 

    void AddSingleCoreTime(CpuCore& newval); 
private: 
    CpuCore total; 
    boost::ptr_vector<CpuCore> cpuCores; 
}; 

및 CpuCore가 cpuCores 벡터에 객체 추가를 들어

class CpuCore { 

public: 
    CpuCore(); 
    CpuCore(int _coreId, long _user, long _nice, long _sysmode, 
     long _idle, long _iowait, long _irq, long _softirq, long _steal, 
     long _guest); 

//all variable declarations... 
} 

, 나는 포인터를 추가해야을? CpuCore * _newVal 매개 변수와

void CpuUsage::AddSingleCoreTime(CpuCore _newVal) { 
    cpuCores.push_back(_newVal); 
} 

, 나는 다음과 같은 오류가 있습니다 :
../src/usage/CpuUsage.h:42 : 오류 : '부스트 또는 내가 좋아하는, normaly, 값을 복사 할 수 있습니다 :: ptr_vector> CpuUsage :: cpuCores '는 개인용입니다 ../src/NodeInfoGather.cpp:73 : 오류 :이 컨텍스트 내에

여기서 벡터가 개인적인 문제는 무엇입니까?

덕분에,

+0

포인터를 추가해야하는데,'boost :: ptr_vector <>'는 포인터와 그것이 가리키는 포인터를 소유하고 있습니다. 왜'std :: vector <>'를 사용하지 않는가? –

+0

이 게시물에서 영감을받은 boost ptr vector를 사용하고 있습니다. http://stackoverflow.com/questions/2693651/c-vector-of-objects-vs-vector-of-pointers-to-new-objects –

+1

주어진 코드에서'CpuCore'에 대해 다형성이있는 것 같습니다. 그러나 게시 된 코드는 실제가 아니며 'AddSingleCoreTime'에 대한 선언 및 정의가 다릅니다. –

답변

0

당신은 ptr_vector에 대한 포인터를 추가해야합니다. 해당 포인터의 소유권을 가져 오므로 수행하면됩니다.

cpuCores.push_back(&_newVal); 

악화 될 수 있습니다. 비록 당신이 정말로 그것을 원한다면 (이것은 당신의 질문에서 분명하지 않다) virtual constructor을 구현할 수있다.

+0

yeap, 정말 효과가있었습니다. 하지만 아키텍처를 수정합니다. 포인터 벡터가 필요 없습니다. C++의 소유권을 이해해야합니다. –