指针映射或堆栈对象映射

map of pointers OR map of stack objects

本文关键字:映射 对象 堆栈 指针      更新时间:2023-10-16

我被困在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 )
}

我相信我已经解释够了,可以回答这个问题。。如果我还缺少什么,请让我知道我会添加它。

这是一个直截了当的答案,希望能有所帮助。

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

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

只有在以下情况下,您才应该保留指针映射:

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

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

在第一种情况下,应该存储指针。在第二种情况下,应该存储智能指针(并让映射中的智能指针管理对象的生存期)。