2014-09-12 5 views
-3

Я застрял на выбор между map_of_pointers ИЛИ map_of_stack_objects (ИЛИ даже карта shared_ptrs.) Основными операциями на карте были бы элементы вставки/удаления/поиска.карта указателей ИЛИ карта объектов стека

Может ли кто-нибудь помочь мне в этом? Спасибо заранее.

В ответ на вопросы: -

Class Cache 
{ 
private: 
A map with key as int and value as AccountDetails 
public: 
createitem 
deleteItem 
updateItem 
searchItem 
}; 

class AccountDetails 
{ 
AccountData a; (20 bytes) 
personalData b; (20 bytes) 
list <positions> c (Each position is 20 bytes) 
} 

Я считаю, что я объяснил достаточно, чтобы ответить на этот вопрос question..If ​​еще я что-то пожалуйста, дайте мне знать, я добавлю его не хватает.

+0

Невозможно ответить без существенной дополнительной информации, вы даже не сказали нам, что эти объекты – EdChum

+0

Для чего вы собираетесь использовать карту? Каковы ваши прецеденты? Это будет решающим для вас. –

+0

@ ravi089: просто используйте «map » для начала - почти невозможно записать его так сильно, что он будет разбит - всегда хорошо для новичков - затем переключитесь на интеллектуальные указатели (или узнайте о семантике перемещения) позже, если вы обнаружите, что производительность плоха, потому что во время копирования объектов 'AccountDetails' в и из« карты »возникают ненужные временные ряды. –

ответ

0

Вот ответ от счастья, надеюсь, это поможет.

Использование каких-либо общих указателей означает, что при уничтожении карты у вас меньше вероятности утечки памяти. Что вы имеете в виду с картой объектов стека? Вы хотите, чтобы карта содержала указатели (голые или умные) для наложения на стек? Не хорошая идея. При добавлении нового ключа, значения в карту, пара сохраняется в куче (std :: map реализуется как красно-черное дерево), поэтому пара не будет в стеке.

+0

Под «картой объектов стека» я имею в виду, что вы просто сохраняете простые объекты на карте – Player

+0

@ ravi089: это показывает фундаментальное непонимание ... фактическое «отображение» объект может или не может находиться в стеке, но он всегда выделяет память для элементов, которые он содержит динамически ... они никогда не находятся в стеке, даже если они были вставлены путем копирования значений, которые были в стеке. –

0

Обычно вы хотели бы разместить объекты в стеке. То есть «карта объектов стека» должна делать (тем самым я предполагаю, что вы имеете в виду «не карту указателей» - потому что, скорее всего, каждый элемент на карте будет распределяться динамически в любом случае).

Вы должны держать карту указателей только тогда, когда:

  • у вас есть доступ к указателям в коде с помощью карты только, и вы не являетесь их владельцем (т.е. вы получили указатели откуда-то и нужно хранить их)

  • вам нужно полиморфное поведение (т.е. вы хранения указателей на базовый класс)

в первом случае, вы должны хранить указатель s. Во-вторых, вы должны хранить интеллектуальные указатели (и иметь умные указатели на карте, управляющие временем жизни объектов).

+0

У меня возникла проблема с использованием smart_pointers в моем проекте. Поскольку хранение карт smart_pointers также отвечало за отправку этих объектов на некоторые другие модули, которые в свою очередь сохраняли бы их в векторах (скажем). Таким образом, объекты, которые я удалил, на самом деле никогда не удалялись из памяти, так как число ссылок никогда не достигало нуля. – Player

+0

согласны с вашей второй точкой ...но в этом случае также следует позаботиться о полном владении этими объектами. – Player

Смежные вопросы