Хранение указателей в std :: vector - PullRequest
0 голосов
/ 19 сентября 2018

Предположим, у меня есть класс A, который содержит много элементов данных.Когда я создаю вектор этого класса std::vector<A> vec; и вызываю vec.push_back(A(...));, иногда ему придется перераспределять память и перемещать все предыдущие объекты в новую память.Это скопирует много объектов А.Решение, которое я нашел, заключается в хранении указателей на объекты A, которые вместо этого размещаются в куче.Это заставит вектор копировать 4-байтовые целые числа, что нормально, но я никогда не видел, чтобы кто-нибудь делал это, поэтому я не уверен, что это правильный подход.

Это что-то стандартное?

1 Ответ

0 голосов
/ 19 сентября 2018

Вот простой пример, показывающий, как часто встречается std::vector<A> против std::vector<A *>.Я добавил llvm 6.0.0, поскольку многие считают его ведущим стандартом разработки CPP.Вот результаты:

$ grep -rn "vector<.*\*" | wc -l
613
$ grep -rn "vector<.*" | wc -l
1707

Так что я думаю, этот пример дает представление о том, какой аромат является более распространенным.Конечно, это всего лишь пример одной кодовой базы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...