std :: vector _M_start и _M_finish одинаковы - PullRequest
0 голосов
/ 11 июня 2018

Я отлаживаю std::vector в GDB и не могу сказать, какой вектор считает его текущий размер.Вектор объявлен как std::vector<custom_struct_t *> myVec;.

(gdb) p myVec.size()
Cannot evaluate function -- may be inlined

Изучение вектора:

(gdb) p myVec
[...]
    _M_impl = {
      [...]
      _M_start = 0x8052a0500, 
      _M_finish = 0x8052a0500, 
      _M_end_of_storage = 0x8052a0600
    }
  }, <No data fields>}

Здесь я вижу, что _M_start и _M_finish - это одно и то же значение.Указывает ли это на вектор нулевой длины или вектор одной длины?

1 Ответ

0 голосов
/ 11 июня 2018

Для реализации libstdc ++ (gcc) это указывает на вектор размером 0, о чем свидетельствует std::vector::size() функция:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }

Этот исходный код можно найти, например, в GCC onlineдокументация .

...