指针地图或堆栈对象的地图

时间:2014-09-12 09:29:12

标签: c++ stl

我无法在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 )
}

我相信我已经解释得足以回答这个问题。如果我还缺少某些东西请告诉我,我会加上它。

2 个答案:

答案 0 :(得分:0)

这是一个从臀部回答的答案,希望它有所帮助。

使用某种共享指针意味着在销毁地图时内存泄漏的可能性较小。堆栈对象的映射是什么意思?你想让地图包含堆栈指针(裸体或智能)吗?不是个好主意。 向地图添加新密钥值时,该对存储在堆上(std :: map实现为红黑树),因此该对不会在堆栈中。

答案 1 :(得分:0)

通常您会希望将对象放在堆栈上。也就是说,&#34;堆栈对象的映射&#34;应该这样做(我认为你的意思是&#34;不是指针的映射&#34; - 因为很可能,地图中的每个元素都将动态分配。)

只有在以下情况下才能保留指针图:

  • 您只能使用地图访问代码中的指针,并且您不拥有它们(即您从某处收到指针并需要存储它们)

  • 您需要多态行为(即您存储指向基类的指针)

在第一种情况下,您应该存储指针。在第二种情况下,您应该存储智能指针(并在地图中使用智能指针来管理对象的生命周期)。