Как проверить успешность / неудачу инициализации вектора в C ++ - PullRequest
2 голосов
/ 22 февраля 2012

У меня есть класс C ++ с vector<float> членами, которые инициализируются в конструкторе до размера, определенного одним из аргументов конструктора.

summingBuffer = vector<float>(requiredSize);

Как проверить, успешно ли векторный конструктор выделил требуемое пространство? Переменные экземпляров не являются указателями (не так ли?), Поэтому if (NULL==myVector) не работает. vector выдает исключение при ошибке размещения? Как насчет проверки .size() потом?

Спасибо ...

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Распределитель по умолчанию выбрасывает std::bad_alloc при неудачном выделении, как new T. Так что нет, проверка размера не требуется. Это не C.

1 голос
/ 22 февраля 2012

Векторный конструктор вызовет bad_alloc, если не сможет выделить достаточно памяти, нет необходимости в дополнительных проверках.

Использование указателей не очень хорошая идея, если они вам абсолютно не нужны.

Кроме того, похоже, что вы могли бы инициализировать свои векторы напрямую, а не то, как вы это делаете, используя список инициализатора вашего конструктора.Что-то вроде:

struct foo {
  std::vector<float> things;

  foo(int vsize) : things(vsize) {
    // rest of constructor code
  }
};
...