2011-11-09 14 views
0

私は休閑クラスがあります。追加メンバー後押し:: 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; 
}; 

とCPUコアが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... 
} 

が、私はポインタを追加する必要がありますか? CPUコア* _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

私はこのポストに触発されたブーストptrベクトルを使用しています: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

うん、それは本当に働いた。しかし、私は私のアーキテクチャを修正する、おそらく私は本当にポインタベクトルを必要としない - 私はまだC + +のこの所有権を理解する必要があります –

関連する問題