Добавление члена Boost :: ptr_vector <> - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть следующие классы:

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

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

    void AddSingleCoreTime(CpuCore& newval);
private:
    CpuCore total;
    boost::ptr_vector<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 в вектор cpuCores должен ли я добавить указатель?Или я могу скопировать значение, обычно, например:

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

С параметром CpuCore * _newVal у меня возникает следующая ошибка:
../src/usage/CpuUsage.h:42: ошибка: 'boost :: ptr_vector> CpuUsage :: cpuCores' является приватным ../src/NodeInfoGather.cpp:73: error: в этом контексте

В чем проблема приватности вектора здесь?

Спасибо

1 Ответ

0 голосов
/ 09 ноября 2011

Вы должны добавить указатель на ptr_vector.Обратите внимание, что этот указатель станет владельцем этого элемента, поэтому простое выполнение

cpuCores.push_back(&_newVal);

может плохо испортить ситуацию.Однако если вы действительно этого хотите (что не ясно из вашего вопроса), вы можете реализовать виртуальный конструктор .

...